svuotare combobox



  • svuotare combobox
    di stefanmi data: 17/09/2013 09:40:45

    ho un problema, quando faccio "registra" vorrei che nellle caselle del combobox si cancellino
    i dati



  • di Grograman data: 17/09/2013 09:58:41

    Da mettere nel modulo di classe "Foglio1":
     
    Sub Svuota()
    Application.EnableEvents = 0
      With Me
        .ComboBox1 = ""
        .ComboBox2 = ""
        .ComboBox3 = ""
      End With
    Application.EnableEvents = 1
    End Sub



  • di stefanmi data: 17/09/2013 11:06:40

    grazie, ecco io avevo messo senza i puntini e senza whit, come al solito ,grazie



  • di stefanmi data: 17/09/2013 11:30:20

    scusa ma non capisco dove inserirla il modulo di classe quale sarebbe?



  • di mb data: 17/09/2013 11:35:57

    ciao Grograman
    mi potresti spiegare dove sbaglio, curiosando ho scaricato e inserito il tuo suggerimento nel modulo1
    ho agganciato la sub con un pulsante, ma mi restituisce errore alla riga whit me ??
    cosa correggo
    grazie



  • di Grograman data: 17/09/2013 11:40:20

    Cit: "ho scaricato e inserito il tuo suggerimento nel modulo1"


    Io invece dove ho scritto di inserirlo?



  • di Grograman (utente non iscritto) data: 17/09/2013 12:00:13

    Allegato screenshot chiarificatore.



  • di mb data: 17/09/2013 12:08:49

    Grazie

    buon pomeriggio



  • di stefanmi data: 17/09/2013 13:22:45

    l'ho copiato dove hai detto ma non mi funziona



  • di Grograman (utente non iscritto) data: 17/09/2013 13:27:42

    Perchè tenti di convertire il valore vuoto della cbo3 in un numero.

    Elimina il codice fuffa che hai in quel modulo di classe



  • di stefanmi data: 17/09/2013 13:31:28

    fatto ma adesso ho 2 problemi non cancella e mi prende i numeri come testo



  • di gaetanopr data: 17/09/2013 14:01:12

    Buon pomeriggio a tutti, prova in questo modo
     
    Private Sub ComboBox3_Change()
    If ComboBox3.Value = "" Then
      Sheets("Foglio1").Cells(1, 9) = ""
    Else
    Sheets("Foglio1").Cells(1, 9) = CDbl(ComboBox3.Value)
    End If
    
    
    End Sub
    Sub Svuota()
    Application.EnableEvents = 0
      With Me
        .ComboBox1 = ""
        .ComboBox2 = ""
        .ComboBox3 = ""
      End With
    Application.EnableEvents = 1
    End Sub
    



  • di gaetanopr data: 17/09/2013 14:05:06

    Scusa ho sbagliato a scrivere
    non considerare la precedente risposta
    in pratica dovresti cambiare solo la prima macro
     
    Private Sub ComboBox3_Change()
    If ComboBox3.Value = "" Then
      Sheets("Foglio1").Cells(1, 9) = Sheets("Foglio1").Cells(1, 9)
    Else
    Sheets("Foglio1").Cells(1, 9) = CDbl(ComboBox3.Value)
    End If
    End Sub
    
    
    Sub Svuota()
    Application.EnableEvents = 0
      With Me
        .ComboBox1 = ""
        .ComboBox2 = ""
        .ComboBox3 = ""
      End With
    Application.EnableEvents = 1
    End Sub
    



  • di Vecchio Frac data: 17/09/2013 14:24:09

    @Grograman
    cit. "Da mettere nel modulo di classe "Foglio1":"

    cit. "che hai in quel modulo di classe"

    ... se chiami "modulo di classe" un modulo normale, ci mandi in confusione ^_^






  • di stefanmi data: 17/09/2013 14:28:55

    niente da fare ho provato con una nuova macro perchè separate funzionano però mi entra quella sub e mi va in blocco, vedere allegato
     
    Sub completa()
    registra
    Foglio1.Svuota
    End Sub



  • di gaetanopr (utente non iscritto) data: 17/09/2013 14:31:03

    hai provato la mia seconda soluzione dovrebbe funzionare



  • di CALIFFO data: 17/09/2013 14:32:50

    salve ma chiedo scusa il comando per azzerare i valori di una combox non è questo ?


     
    Dim i As Integer
    For i = Combo1.ListCount - 1 To 0 Step -1
    Combo1.RemoveItem i
    Next i



  • di stefanmi data: 17/09/2013 14:33:36

    non funziona gaetanopr



  • di gaetanopr (utente non iscritto) data: 17/09/2013 14:34:16

    ti allego file



  • di Grograman (utente non iscritto) data: 17/09/2013 14:39:57

    Doh!

    Cioè i moduli di fogli e cartelle di lavoro NON sono moduli di classe?




  • di stefanmi data: 17/09/2013 14:51:53

    gaetanopr, ora cancella però non copia i dati nell'altra tabella



  • di gaetanopr (utente non iscritto) data: 17/09/2013 14:58:08

    quale altra tabella? forse ho cambiato colonna dalla H alla I



  • di stefanmi data: 17/09/2013 15:04:20

    si, quello l'ho corretto ma mi deve copiare i dati dalla X alla Z e poi svuotare le combobox



  • di gaetanopr (utente non iscritto) data: 17/09/2013 15:04:54

    si ora ho capito ma questo è normale se tu cancelli il valor selezionato con la combo, la cella collegata ad essa si svuota anche, quindi devi collegare la cella da macro come con la combo3



  • di gaetanopr (utente non iscritto) data: 17/09/2013 15:09:36

    quindi in questo modo





     
    Sheets("Foglio1").Cells(1, 7) = ComboBox1
    Sheets("Foglio1").Cells(1, 8) = ComboBox2



  • di Vecchio Frac data: 17/09/2013 15:14:20

    @califfo
    Anche
    Combobox1.Clear
    dovrebbe funzionare ^_^





  • di gaetanopr (utente non iscritto) data: 17/09/2013 15:38:09

    @Vecchio Frac
    Anche
    Combobox1.Clear
    dovrebbe funzionare ^_^

    Scusate ma credo che con removeItem e clear, cancellino le liste della combobox, invece stefanmi deve cancellare la scelta effettuata ecco perchè Combobox1 = "" forse si può anche fare così ComboBox1.ListIndex = -1(sono senza pc e non posso provare)
    le liste devono rimanere



  • di Vecchio Frac data: 17/09/2013 15:54:34

    @gaetano
    ok, avendo letto frettolosamente non avevo inteso bene

    @gro'
    cit. "Cioè i moduli di fogli e cartelle di lavoro NON sono moduli di classe? "
    ---> Oggettivamente e tecnicamente no ^_^





  • di stefanmi data: 17/09/2013 21:21:48

    sonoriuscito con questa macro a registrare e aggiornare la pivot con un unico clik,non si potrebbe mettere qui qualcosa che svuoti la combobox dopo aver aggiornato
     
    Sub registra()
        
        With [X1048576]
            [F1:H1].Copy [X1048576].End(xlUp).Offset(1)
            ActiveSheet.PivotTables("Tabella_pivot3").PivotCache.Refresh
        End With
       
    End Sub
    



  • di HarryBosch data: 17/09/2013 23:49:07

    Puoi anche assegnare direttamente i valori delle combobox alla tabella Pivot e quindi cancellare il valore appena inserito. Se ti serve puoi fermare la registrazione nel caso una delle combobox fosse vuota.

    Per aggiungere la registrazione lungo la tabella, puoi dapprima individuare la prima cella vuota:
    ur = [X1048576].End(xlUp).Offset(1).Row
    e quindi utilizzare il riferimento "ur" nel Cells.
    Si potrebbe ricavare questo dato anche dalle proprietà della stessa Tabella Pivot, ma non entriamo nel sofisticato :)
     
    Sub registra()
    
      Dim ur As Integer
      ur = [X1048576].End(xlUp).Offset(1).Row
      
      With ActiveSheet
        If .ComboBox1 = "" Or .ComboBox2.Value = "" Or .ComboBox3.Value = "" Then
          MsgBox "Attenzione, campo vuoto. Impossibile registrare"
          Exit Sub
        End If
    
        Cells(ur, "x") = .ComboBox1
        Cells(ur, "y") = .ComboBox2
        Cells(ur, "z") = .ComboBox3
        .ComboBox1 = ""
        .ComboBox2 = ""
        .ComboBox3 = ""
      End With
    
    End Sub



  • di stefanmi data: 18/09/2013 00:35:17

    la cella Z però me la prende come testo invece mi serve come numero



  • di HarryBosch data: 18/09/2013 00:55:19

    Si può sempre formattare prima di inserire...
     
    Cells(ur, "z") = Format(.ComboBox3, "0,00")



  • di stefanmi data: 18/09/2013 01:23:57

    problema risolto, grazie
    un'altra cosa al primo inserimento però non mi copia i dati in X2 ma in X3 però così non entra nella tabella, come si puo' risolvere? allego foto



  • di Grograman data: 18/09/2013 08:53:35

    Tipo così?
     
    if ur < 3 then ur = 2
    
    



  • di Grograman data: 18/09/2013 08:54:44

    Va bhè il caffè deve ancora entrare in circolo....
     
    if .cells(2,"Z") = "" then ur = 2
    
    ma meglio vedere il codice completo



  • di stefanmi data: 18/09/2013 09:24:39

    dopo il primo inserimento andrebbe bene
     
    Sub registra()
    
      Dim ur As Integer
      ur = [X1048576].End(xlUp).Offset(1).Row
      
      With ActiveSheet
        If .ComboBox1 = "" Or .ComboBox2.Value = "" Or .ComboBox3.Value = "" Then
          MsgBox "Attenzione, campo vuoto. Impossibile registrare"
          Exit Sub
        End If
    
        Cells(ur, "x") = .ComboBox1
        Cells(ur, "y") = .ComboBox2
        Cells(ur, "z") = Format(.ComboBox3, "0,00")
        .ComboBox1 = ""
        .ComboBox2 = ""
        .ComboBox3 = ""
      End With
    ActiveSheet.PivotTables("pivot").PivotCache.Refresh
    End Sub
    



  • di Grograman data: 18/09/2013 09:35:22

    Non capisco (a parte che non mi piace una sintassi che non avda bene per versioni pre 2007!):

    ur = [X1048576].End(xlUp).Offset(1).Row

    Dovrebbe già darti la prima cella vuota.
    Sarebbe come scrivere:

    ur = Range("X" & Rows.Count).End(xlUp).Row + 1

    Quindi a riga 2 vuota dovrebbe essere proprio 2!

    Su quale dei 13 allegati ti da il problema?



  • di stefanmi data: 18/09/2013 09:42:33

    ti ho caricato un file "definitiva" la prima registrazione non la copia in x2 perche è una tabella parte da x3



  • di Grograman (utente non iscritto) data: 18/09/2013 10:03:20

    Ah ecco perchè, hai una tabella la sopra.

    O la converti in intervallo dati oppure cambi il modo di trovare ur, più passibile di errori:
     
    ur = Sheets("foglio1").ListObjects("Tabella1").ListRows.Count + 2



  • di stefanmi data: 18/09/2013 10:59:18

    la tabella poi mi serve per la pivot



  • di stefanmi data: 18/09/2013 11:05:30

    perfetto, come al solito



  • di Grograman (utente non iscritto) data: 18/09/2013 11:26:52

    Perfettibile più che perfetto



  • di stefanmi data: 18/09/2013 17:22:14

    premesso che funziona bene, però una curiosità, allora la prima volta che inserisco i dati quel + 2 vuol dire riga 2, ma alla seconda come mai va giusta nella riga 3?
     
    ur = Sheets("foglio1").ListObjects("Tabella1").ListRows.Count + 2



  • di stefanmi data: 18/09/2013 22:07:48

    un problemino, quando seleziono 7.50 nella combobox mi riporta 8 nella tabella



  • di gaetanopr (utente non iscritto) data: 18/09/2013 22:19:19

    Ciao Stefanmi, cambia Cells(ur, "z") = Format(.ComboBox3, "0,00")
    con Cells(ur, "z") = Cdbl(.ComboBox3)



  • di stefanmi data: 18/09/2013 23:06:02

    adesso mi restituisce "FALSO"



  • di HarryBosch data: 18/09/2013 23:11:56

    @ gaetanopr
    bravo, bella idea :)

    @ stefanmi
    come sarebbe a dire "falso"?
    Hai sostituito l'intera istruzione come ti è stato proposto?



  • di stefanmi data: 18/09/2013 23:17:59

    scusa ho sbagliato ho copiato male, io avevo provato con questa

     
    CDbl(ComboBox3.Value)



  • di Grograman data: 19/09/2013 08:54:09

    Cit: "la prima volta che inserisco i dati quel + 2 vuol dire riga 2"

    Non esattamente.
    Ti riporto in seguito la guida in linea per la spiegazione "ufficiale".
    Qeull'istruzione si basa sul numero di righe della tabella (ecco perchè la ritengo più labile, la tabella porebbero spostarla!).



     
    Guida di riferimento per sviluppatori di Excel 
    Oggetto ListRows 
    Insieme di tutti gli oggetti ListRow nell'oggetto ListObject specificato.
    Note
    
    
    Ogni oggetto ListRow rappresenta una riga della tabella.
    
    
    Esempio
    
    
    Utilizzare la proprietà ListRows dell'oggetto ListObject per restituire l'insieme ListRows. Nell'esempio seguente viene aggiunta una nuova riga all'oggetto ListObject predefinito nel primo foglio di lavoro della cartella di lavoro. Poiché non viene specificata una posizione, la nuova riga verrà aggiunta alla fine della tabella.
    
    Visual Basic, Application Edition 
    Set myNewRow = Worksheets(1).ListObject(0).ListRows.Add 
    



  • di stefanmi data: 19/09/2013 09:37:01

    però quel 2 la prima volta è giusto in quanto la prima riga è l'intestazione ma la seconda volta + o vorrebbe dire saltare una riga e inserire nella 4 o no?



  • di stefanmi data: 19/09/2013 09:47:05

    forse ho capito, allora ogni volta riconta l'ultima scritta+1