Excel Forum Per condividere esperienze su Microsoft Excel

Apertura Userform

  • Messaggi
  • OFFLINE
    gionox
    Post: 136
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 21/06/2017 19:29
    Ciao ragazzi, sto lavorando a una Userform per l'inserimento di dati.
    In realtà è la prima per cui sono molto inesperto ancora.
    Praticamente succede che all'apertura tutte le combobox risultano spopolate.
    Se però, con un tasto Pulisci Campi richiamo il userform_initalize
    allora improvvisamente si popolano tutte le combobox
    Dove sbaglio.

    Per avviare la Userform uso Dati.Show

    Vi allego il file di prova.
    Grazie anticipatamente.



    https://www.dropbox.com/s/j6j02op9xqqs03p/consulenza.xlsm?dl=0
    [Modificato da gionox 21/06/2017 19:31]
  • OFFLINE
    alfrimpa
    Post: 3.295
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 21/06/2017 19:41
    Con il pulsante non devi richiamare userform _Initialize ma deve "pulire" direttamente tutti i campi.

    Alfredo
  • OFFLINE
    gionox
    Post: 136
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 21/06/2017 20:16
    Quindi nella macro che utilizzo per lanciare la Userform al posto di Dati.Show scrivo direttamente Dati.Inalitaze?
    [Modificato da gionox 21/06/2017 20:16]
  • OFFLINE
    alfrimpa
    Post: 3.296
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 21/06/2017 20:32
    No Dati.Show serve per visualizzare la maschera.

    Supponiamo (ora non posso vedere il tuo file) che sulla userform ci siano 5 TextBox

    con un codice di questo tipo si puliscono.

    vb
    Private Sub CommandButton1_Click()
    Dim i as Integer
    For i = 1 To 5
           Me.Controls("TextBox" & i).Value = ""
    Next i
    End Sub
    
    [Modificato da alfrimpa 21/06/2017 20:33]

    Alfredo
  • OFFLINE
    gionox
    Post: 137
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 21/06/2017 23:43
    Eh, il problema è che le combobox sono spopolate appena si avvia la Userform. Se invece con il pulsante (che è sempre nella Userform) pulisco i campi, allora si popolano
  • OFFLINE
    alfrimpa
    Post: 3.297
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 22/06/2017 08:26
    Ma io un esempio di codice te l'ho dato; lo hai provato?

    Alfredo
  • OFFLINE
    alfrimpa
    Post: 3.298
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 22/06/2017 09:59
    Questa macro associata al pulsante fa quello che hai chiesto

    vb
    Private Sub PUL_CAMPI_Click()
    Dim ctrl As Control
    For Each ctrl In Me.Controls
        If TypeName(ctrl) = "TextBox" Or TypeName(ctrl) = "ComboBox" Then
            ctrl.Value = ""
        End If
    Next ctrl
    End Sub
    
    [Modificato da alfrimpa 22/06/2017 10:00]

    Alfredo
  • OFFLINE
    gionox
    Post: 138
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 22/06/2017 11:08
    Ti ringrazio per il codice ma non ho capito proprio.
    All'avvio della Userform è normale che io debba cliccare il pulsante PUL_CAMPI per iniziare?
    La sua funzione era un altra ma sembra che lo debba cliccare per far funzionare la Userform
  • OFFLINE
    alfrimpa
    Post: 3.299
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 22/06/2017 11:30
    All'avvio la maschera è sempre vuota.

    Anziché fare come dici tu modifica la sub Inserisci così ed elimina il pulsante "Pulisci"; in questo modo quando cliccherai su Inserisci i dati saranno trasferiti sul foglio e la maschera verrà "ripulita" e sarà pronta per un eventuale nuovo inserimento.

    vb
    Private Sub INSERISCI_Click()
    Dim emptyRow As Long
    Dim d As Date
    Dim s As String
    Dim ctrl As Control
    s = NomeTextBox & " " & CognomeTextBox
        
        With Me
            d = .ComboBox1.Text & "/" & _
                .ComboBox2.Text & "/" & _
                .ComboBox3.Text
        End With
    
    Sheets("Riepilogo").Select
    
    'Determine emptyRow
    emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
    
    'Transfer information
    
    Cells(emptyRow, 1).Value = s
    Cells(emptyRow, 2).Value = CommessaComboBox.Value
    Cells(emptyRow, 3).Value = d
    Cells(emptyRow, 4).Value = OreLavorateTextBox.Value
    
    For Each ctrl In Me.Controls
        If TypeName(ctrl) = "TextBox" Or TypeName(ctrl) = "ComboBox" Then
            ctrl.Value = ""
        End If
    Next ctrl
    
        
    
    
    
    End Sub
    


    Non so se era questo quello che volevi.
    [Modificato da alfrimpa 22/06/2017 11:30]

    Alfredo
  • OFFLINE
    gionox
    Post: 139
    Registrato il: 12/04/2013
    Città: BARI
    Età: 34
    Utente Junior
    2016
    00 22/06/2017 15:46
    Allora, la mia richiesta lho risolta cosi:
    Dati.Show
    Call Dati.Userform_Initialize

    Il tuo codice va benissimo, lo avrei sicuramente chiesto più in là
    [Modificato da gionox 22/06/2017 16:07]