scegliere quale Userform aprire



  • scegliere quale Userform aprire
    di AlPa (utente non iscritto) data: 19/05/2015 17:54:46

    Salve a tutti.
    In un file Excel ho tre Userform rispettivamente nominate Userform1, Userform2 e Userform3.
    Ho l'esigenza di aprire, tramite codice, la Userform in base al valore assunto dalla variabile n.
    Pertanto se la variabile assume valore 2 si dovrà aprire la Userform2
    Qualcosa del genere per intenderci
    Come dovrei procedere?
    grazie mille in anticipo.
     
    Sub OpenUsfm
    'ipotizziamo che la varibile n viene passata attraverso un'altra routine e può assumere il valore 1, 2 oppure 3
    Userform & n.Show 'istruzione chiaramente non funzionante.
    End Sub



  • di Albatros54 data: 19/05/2015 18:50:21

    supposta che hai 3 userform, incolla il codice sotto in un modulo e lancia la macro,
    potrebbe essere un punto di partenza
     
    Sub prova()
    Dim n As Double
        n = InputBox("dammi il valore")
        Select Case n
            Case Is = 1
                UserForm1.Show
            Case Is = 2
                UserForm2.Show
            Case Is = 3
                UserForm3.Show
    End Select
    
            End Sub
    






  • di azzeccagarbugli (utente non iscritto) data: 19/05/2015 18:58:19

    Possono esserci viverse alternative.
    Quella che ti propomgo, prevede la Variabile in "A1"; UserForm si attiva in modo dinamico all'inserimento di uno dei tre valori.
     
    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address = "$A$1" Then
            Select Case Range("A1").Value
                Case 1
                    UserForm1.Show
                Case 2
                    UserForm2.Show
                Case 3
                    UserForm3.Show
            End Select
        End If
        
    End Sub
    



  • di azzeccagarbugli (utente non iscritto) data: 19/05/2015 19:02:05

    Leggo solo ora la risposta di Albatros54, al quale chiedo scusa per la sovrapposizone.



  • di Albatros54 data: 19/05/2015 19:13:19

    @ azzeccagarbugli
    Chiedere scusa per che cosa,mica chi arriva prima vince, nel forum ognuno
    porta il suo umile contributo...credo.
    Ciao
    Albatros54





  • di AlPa (utente non iscritto) data: 19/05/2015 19:14:16

    Ringrazio innanzi tutto.
    Il problema è che ho semplificato ipotizzando per n solo 3 valori.
    In realtà sono una trentina e volevo evitare di utilizzare il Select Case.
    Colpa mia per non essere stato chiaro sin dall'inizio...
    Esiste una soluzione?



  • di Albatros54 data: 20/05/2015 13:44:10

    Navigando per il mare della rete ,ho trovato un codice che ho cercato di adattare alle tue esigenze.Ho creato diverse userform(circa trenta) ho cambiato il loro nome rinominandole Form1, Form2.....form(n), ho incollato il codice sotto nel foglio1..e credo che funzioni, sulla base , il codice lo puoi adattare alle tue esigenze.
    Ciao
    Albatros54
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    
        Dim form As UserForm
        Dim m As String
        If Target.Address = "$A$3" Then
    
            'n = InputBox("dammi la userform")
            MsgBox "form" & Cells(3, 1).Value <=== test lo puoi commentare
            m = "form" & Cells(3, 1).Value
            VBA.UserForms.Add(m).Show
    
        End If
    
    End Sub






  • di AlPa (utente non iscritto) data: 20/05/2015 17:28:05

    Ottimo Albatros54!!!!
    Funziona perfettamente.Era quello che cercavo.
    In questo modo evito il Select Case con 30 opzioni... sembrava facile ma non lo era.
    Grazie tante,



  • di Rugantino (utente non iscritto) data: 24/05/2015 18:35:59

    Chiedo scusa se riapro la discussione, ma è da un pò che cercavo di creare un codice, proprio per evitare il Select Case.
    Sto cercando di adattare la soluzione di Albatros, ma non funziona...
    Praticamente devo scrivere:

    se la password che ho inserito in TextBox5 corrisponde a quella inserita in TextBox2 apri la UserForm indicata nella TextBox3
    ...ma non ci riesco...

    Potete aiutarmi?



  • di Marius44 data: 25/05/2015 07:35:51

    cit. Rugantino " ... ma non ci riesco ..."
    Hai tenuto presente che la routine proposta da Albatros (che saluto) assume un "valore" mentre il valore che ti viene restituito da una TextBox è SEMPRE una stringa?
    Converti la stringa di TextBox3 in valore e ... dovrebbe funzionare.
    Ciao.



  • di Albatros54 data: 25/05/2015 10:56:45

    da quello che sono riuscito a capire: tu apri una userform, dove ci sono delle textbox, e inserendo dei dati, vorresti aprire un'altra userform in base ai valori di due textbox?
    allega un file, se ti è possibile.
    Ciao
    Albatros54





  • di Rugantino (utente non iscritto) data: 25/05/2015 15:28:14

    Si, Albatros, esatto!
    ma non trovo il tasto per allegarti il file...
    credo debba registrarmi. Provvedo subito..

    comunque l'attuale codice che sto tentando di far funzionare (incasinato) è:

    Private Sub CommandButton3_Click()
    Dim X As Integer
    X = Val(TextBox3)
    If Me.TextBox5.Text = TextBox2 Then
    Unload Me
    X = Val(TextBox3)
    VBA.UserForms.Add(X).Show
    Unload Me
    Exit Sub
    End If
    MsgBox "ATTENZIONE: Utente e/o Password non valido. Riprova!"
    End Sub

    Grazie
    Rugantino



  • di Rugantino (utente non iscritto) data: 25/05/2015 16:17:45

    Ho inviato un file, ma io stesso non lo vedo...

    Rugantino



  • di Marius44 data: 25/05/2015 17:01:03

    @Rugantino
    nella sub che hai postato per ultima sostituisci
    VBA.UserForms.Add(X).Show
    con
    VBA.UserForms.Add("UserForm" & X).Show
    e ... riprova.
    A me ha funzionato
    Ciao



  • di Albatros54 data: 25/05/2015 17:06:17

    ho modificato la il codice del CommandButton3_Click() vedi sotto
    Ciao
    albatros54
     
    Private Sub CommandButton3_Click()
    Dim X As Integer
    Dim a As String
    X = Val(TextBox3)
                If Me.TextBox5.Text = TextBox2 Then
                    Unload Me
                    X = Val(TextBox3)
                    a = "userform" & X '<==========
                    VBA.UserForms.Add(a).Show '<===========
                    Unload Me
                    Exit Sub
                End If
        MsgBox "ATTENZIONE: Utente e/o Password non valido. Riprova!"
    ComboBox1 = ""
    TextBox1 = ""
    TextBox2 = ""
    TextBox5 = ""
    
    End Sub
    






  • di Albatros54 data: 25/05/2015 17:08:46

    @ Marius44 : Ci siamo sovrapposti, Ciao.





  • di Marius44 data: 25/05/2015 17:24:59

    L'importante è avere risolto il problema. Ciao



  • di Rugantino (utente non iscritto) data: 25/05/2015 22:22:53

    Albatros, Marius, siete grandi. Entrambe le soluzioni funzionano benissimo
    Ci sbattevo la testa da 10 giorni.
    Grazie ancora
    Rugantino