Excel Forum Per condividere esperienze su Microsoft Excel

Aggiornamento lista combobox in caso di inserimento dato non in elenco

  • Messaggi
  • OFFLINE
    Chiara-ExcelForum
    Post: 42
    Registrato il: 22/12/2017
    Città: MILANO
    Età: 44
    Utente Junior
    Excel2016
    00 12/01/2018 10:21
    Ciao, avrei l'esigenza di aggiornare con Userform attiva, l'elenco dei dati visualizzati con la combobox in caso in cui inserisca un nuovo dato non in elenco

    Al codice
    If Not rng Is Nothing Then
                    'Application.Goto Rng, True
                Else
                    risp = MsgBox("Voce non trovata" & Chr(10) & "Vuoi aggiungerla?", vbYesNo)
                    Select Case risp
                        Case vbYes
                        ur = Sheets("elenchi").Cells(Rows.Count, "b").End(xlUp).row
                        Sheets("elenchi").Cells(ur + 1, "b").Value = ComboBox1.Value 


    (creato da un utente del Forum ), ho cercato di adattare un esempio trovato in una discussione del Forum

    
    Dim Riga As Long (se ho capito bene, viene dichiarata una variabile Long perchè permette di inserire numeri contenuti in un intervallo troppo grande rispetto ad Integer.non capisco perchè usare Long se io devo inserire delle parole e non numeri)
    Riga = ActiveCell.Row (viene individuata la riga selezionata)  
    
        ComboBox1.Value = "" (la cella a cui si riferisce la combobox è vuota) 
        Cells(Riga, 1) = TextBox1.Value (viene copiato il dato visualizzato nella TextBox nella riga selezionata)
    


    Ho inserito nel codice delle spiegazioni tra () non con l'intenzione di "insegnare" a voi (figuriamoci se io posso spiegare a voi qualcosa di cui non so nulla) ma al contrario, per dimostrarvi che ho cercato di comprendere il significato del codice, anche se con scarsi risultati [SM=x423027]

  • ONLINE
    alfrimpa
    Post: 3.620
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 12/01/2018 10:47
    Scusa Chiara ma in cosa differisce questa tua nuova richiesta cin quella che avevamo già in corso?

    Non è la stessa cosa?

    P.S. Ti avevo mandato una FFZ mail l'hai vista?

    Alfredo
  • OFFLINE
    Zer0kelvin
    Post: 844
    Registrato il: 24/04/2004
    Città: TERAMO
    Età: 63
    Utente Senior
    2010
    00 12/01/2018 12:20
    Ciao a tutti.
    Spero di aver capito bene l'esigenza: vuoi aggiornare l'elenco visualizzato dalla ComboBox nel caso si inserisca un valore non presente in Elenco.
    Riguardo al secondo codice che hai allegato, non mi sembra c'entri nulla con quello che vuoi fare.
    A proposito di questo commento
    Dim Riga As Long (se ho capito bene, viene dichiarata una variabile Long perchè permette di inserire numeri contenuti in un intervallo troppo grande rispetto ad Integer.non capisco perchè usare Long se io devo inserire delle parole e non numeri)
    Riga = ActiveCell.Row (viene individuata la riga selezionata)  
    La variabile è Long perchè deve contenere il Numero di Riga della cella interessata, non il suo valore.
    =========================================================
    =========================================================
    Per inserire un dato non presente nella Combobox, ti conviene usare una subroutine a parte che puoi usare per tutte e quattro le combo.
    La routine va inserita nel modulo della userform
    Private Sub AggiornaCombo(Combo As Object)
    Dim C As Long
        With Combo
            For C = 0 To .ListCount - 1
                If .List(C) = .Text Then Exit Sub 'se il valore è gia in lista non aggiunge nulla
            Next C
            .AddItem .Text 'aggiunge alla lista il valore inserito nella Combo
        End With
    End Sub
    Questo è AfterUpdate per combobox 1
    Private Sub ComboBox1_AfterUpdate()
    Dim risp As Integer
    Dim ur As Long
    Dim rng As Range
    With Sheets("Elenchi").Range("b:b")
        Set rng = .Find(What:=ComboBox1.Value, _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)
        If Not rng Is Nothing Then
            'Application.Goto Rng, True
        Else
            'il Select Case non serve, i casi sono solo due
            If MsgBox("Voce non trovata" & Chr(10) & "Vuoi aggiungerla?", vbYesNo) = vbYes Then
                ur = Sheets("elenchi").Cells(Rows.Count, "b").End(xlUp).Row
                Sheets("elenchi").Cells(ur + 1, "b").Value = ComboBox1.Value
                AggiornaCombo ComboBox1 '<<======== inserisce il nuovo dato nell'elenco
            Else
                Me.ComboBox1.Value = ""
    '                    Exit Sub 'questo non serve
            End If
        End If
    End With
    End Sub
    [Modificato da Zer0kelvin 12/01/2018 12:26]
    __________________________
    [Excel 2010]
    -Condividere la conoscenza aumenta la ricchezza di tutti.
    -Dai ad un uomo un pesce e lo avrai sfamato per un giorno; insegnagli a pescare e lo avrai sfamato per sempre. (Confucio)
    -Il sonno della ragione genera mostri. (Francisco Goya)
  • OFFLINE
    Chiara-ExcelForum
    Post: 42
    Registrato il: 22/12/2017
    Città: MILANO
    Età: 44
    Utente Junior
    Excel2016
    00 12/01/2018 12:48
    Re:
    alfrimpa, 12/01/2018 10.47:

    Scusa Chiara ma in cosa differisce questa tua nuova richiesta cin quella che avevamo già in corso?

    Non è la stessa cosa?



    Ciao Alfrimpa, credevo che dovendo fare una nuova domanda, dovessi aprire una nuova discussione per rendere maggiormente visibile l'argomento
    [SM=x423061]

    alfrimpa, 12/01/2018 10.47:

    P.S. Ti avevo mandato una FFZ mail l'hai vista?




    cos'è? [SM=x423039]


    [Modificato da Chiara-ExcelForum 12/01/2018 12:48]
  • OFFLINE
    Chiara-ExcelForum
    Post: 43
    Registrato il: 22/12/2017
    Città: MILANO
    Età: 44
    Utente Junior
    Excel2016
    00 12/01/2018 12:50

    Grazie anche a te Zer0kelvin..

    ho...(o almeno credo) inserito il codice nel modulo della Userform ma mi dà un errore

    Allego il file

    Grazie
    [Modificato da Chiara-ExcelForum 12/01/2018 12:51]
  • ONLINE
    alfrimpa
    Post: 3.621
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 12/01/2018 14:24
    Re: Re:
    Chiara-ExcelForum, 12/01/2018 12.48:




    cos'è? [SM=x423039]





    Ti avevo semplicemente inviato un messaggio privato per chiederti delle cose sulla discussione che avevamo in precedenza in corso.

    Per vederlo devi andare nella Home Page del forum e in alto a destra trovi il pulsante E-mail; cliccaci su e lo vedrai.

    Comunque avresti dovuto ricevere anche una mail sul tuo account di posta che ti notificava l'invio.



    Alfredo
  • OFFLINE
    Chiara-ExcelForum
    Post: 44
    Registrato il: 22/12/2017
    Città: MILANO
    Età: 44
    Utente Junior
    Excel2016
    00 12/01/2018 14:38
    Vado subito a vedere... via email non ho ricevuto nulla. Eppure ricevo le notifiche del Forum. Magari è finita nello Spam
    [SM=x423021]
  • OFFLINE
    Zer0kelvin
    Post: 845
    Registrato il: 24/04/2004
    Città: TERAMO
    Età: 63
    Utente Senior
    2010
    00 12/01/2018 17:53

    Per inserire un dato non presente nella Combobox, ti conviene usare una subroutine a parte che puoi usare per tutte e quattro le combo.
    La routine va inserita nel modulo della userform

    Fai più attenzione a quello che leggi; il modulo della Userform è quello dove si trova il codice dei controlli (come AfterUpdate).
    Comunque, visto che ormai l'hai inserita in un modulo standard, sostituisci
    Private Sub AggiornaCombo(Combo As Object)

    con
    Public Sub AggiornaCombo(Combo As Object)

    Riguardo alla mail FFZ di alfrimpa, non si tratta di una email vera e propria, ma della messaggitica interna del forum.
    Dovresti poterlo leggere cliccando sul pulsante EMAIL del forum, a inizio pagina, a destra.
    [Modificato da Zer0kelvin 12/01/2018 17:57]
    __________________________
    [Excel 2010]
    -Condividere la conoscenza aumenta la ricchezza di tutti.
    -Dai ad un uomo un pesce e lo avrai sfamato per un giorno; insegnagli a pescare e lo avrai sfamato per sempre. (Confucio)
    -Il sonno della ragione genera mostri. (Francisco Goya)
  • OFFLINE
    Chiara-ExcelForum
    Post: 47
    Registrato il: 22/12/2017
    Città: MILANO
    Età: 44
    Utente Junior
    Excel2016
    00 13/01/2018 17:42
    Abbi pazienza ma proprio non capisco

    Dove devo inserire il codice? L'ho inserito nel foglio che s'è aperto cliccando su Form - Visualizza codice ma non funziona

    [SM=x423039]
  • OFFLINE
    Zer0kelvin
    Post: 848
    Registrato il: 24/04/2004
    Città: TERAMO
    Età: 63
    Utente Senior
    2010
    00 14/01/2018 00:04
    Re:
    Chiara-ExcelForum, 13/01/2018 17.42:

    Abbi pazienza ma proprio non capisco

    Dove devo inserire il codice? L'ho inserito nel foglio che s'è aperto cliccando su Form - Visualizza codice ma non funziona

    Cosa non funziona?
    Quando non funziona?
    Cosa dovrebbe fare il codice e cosa non fa?
    Ti da errore?
    Se sì devi specificare il tipo di errore e dove si verifica cliccando su Debug.
    Non ho la palla di cristallo.
    Il codice per aggiungere la voce alla listbox funziona correttamente.


    [Modificato da Zer0kelvin 14/01/2018 00:06]
    __________________________
    [Excel 2010]
    -Condividere la conoscenza aumenta la ricchezza di tutti.
    -Dai ad un uomo un pesce e lo avrai sfamato per un giorno; insegnagli a pescare e lo avrai sfamato per sempre. (Confucio)
    -Il sonno della ragione genera mostri. (Francisco Goya)
  • OFFLINE
    Chiara-ExcelForum
    Post: 48
    Registrato il: 22/12/2017
    Città: MILANO
    Età: 44
    Utente Junior
    Excel2016
    00 14/01/2018 10:19
    In effetti funziona.... ora che ho capito dove dovevo copiare il codice grazie al tuo esempio
    [SM=x423030]

    Grazie moltissimo [SM=x423053]
  • OFFLINE
    Chiara-ExcelForum
    Post: 52
    Registrato il: 22/12/2017
    Città: MILANO
    Età: 44
    Utente Junior
    Excel2016
    00 18/01/2018 13:54
    Ciao,nell'accodarmi a questa discussione spero di non commettere una violazione del regolamento
    Ho in effetti letto in molti Forum che il Moderatore "bacchetta" l'utente perchè continua una discussione piuttosto di crearne una nuova. Dal momento che proseguo con lo stesso argomento, ho ripresto da dove m'ero fermata

    Chiusa questa parentesi, vi chiederei un aiuto in quanto non riesco più a far funzionare correttamente il codice "aggiorna Combobox" consigliatomi nel forum

    La cosa strana è che ha funzionato per qualche giorno, poi (non escludo di aver inavvertitamente effettuato qualche modifica nel codice) ha smesso di funzionare

    Per non "sapere nè leggere nè scrivere" ho sostituito il codice consigliato con quello nel mio xls ma nulla da fare... cosa sarà successo? [SM=x423042]

    Grazie
    Ciao