› Excel e gli applicativi Microsoft Office › Caricare ListBox tramite ComboBox (Excel 2016)
-
AutoreArticoli
-
Ciao a tutti
avrei bisogno del vostro prezioso aiuto..
Nel Foglio4 ho una lista di nomi con relativo indirizzo email (A1 NOME; B1 EMAIL, A2 NOME; B2 EMAIL ecc), ecco come faccio a caricarle in una combobox in modo che nella listbox esca l'indirizzo email?
Sia ComboBox e ListBox sono contenute in una UserForm (Name: UserForm1, Caption: Enter Data).
Vi ringrazio in anticipo per ogni suggerimento e buona serata
Il controllo Combobox espone la proprietà RowSource che puoi collegare al foglio e al range dove risiedono i dati.
Il controllo stesso poi ha un evento Change che puoi sfruttare per riempire la Listbox al variare del dato selezionato.
Poi ci sarebbero altre domande, quali: la listbox viene caricata sempre solo col dato selezionato nella combo? oppure ogni volta che selezioni un valore dalla combo, il relativo dato si aggiunge a quelli esistenti (selezionati in precedenza)?
Grazie mille per aver risposto!
Riguardo alla prima domanda:
se vuoi dire che se nella combobox seleziono un nome (A1) nella listbox esce l'email relativo (B1) allora la risposta è sì.
Le altre email non vengono visualizzate, ma solo quella relativa al nome.
D'accordo, ma volevo sapere se ogni volta che scegli un nome dalla combobox, quello che hai selezionato si aggiunge agli altri valori già presenti nella listbox, o se invece quest'ultima viene svuotata ogni volta (per cui conterrà sempre solo un valore). Io credo la prima ipotesi, ma attendo conferma 🙂
Comunque hai trovato la proprietà RowSource? La puoi anche inizializzare nell'evento di Initialize del form (e magari è la strada migliore, perchè così puoi avere un riferimento dinamico al range dei dati)
se ogni volta che scegli un nome dalla combobox, quello che hai selezionato si aggiunge agli altri valori già presenti nella listbox
Vuoi dire che nella listbox si crea tipo lista?
se invece quest'ultima viene svuotata ogni volta (per cui conterrà sempre solo un valore)
nel senso che ogni volta che scelgo un nome dalla combobox, di seguito la listbox si popola con la relativa email; nel momento in cui scelgo un altro nome nella combobox il contenuto precedente si cancella (listbox) e si ripopola sempre con l'email relativa al nome?
Se ho detto bene, ho bisogno che ogni volta che scelgo un nome, la listbox si svuoti dai contenuti precedenti perchè deve contenere solo un valore.
Bene, allora ti faccio riflettere sul fatto che la listbox per sua natura è un controllo che serve a contenere una lista di elementi magari con più valori (immagina un elenco con alcune colonne). Per quello che serve a te è un po' troppo, se in effetti ti basta avere solo un valore per volta. Ti basta un controllo Textbox.
Comunque si può fare tutto
Guarda, allego un banalissimo file di esempio confezionato proprio adesso per farti vedere cosa intendo.
Allegati:
You must be logged in to view attached files.Per la fretta h dimenticato di inserire qualcosa per avviare il form
Fai Alt-F11 per l'IDE, poi Ctrl-R pe rla finestra progetti, scegli l'userform, e avvialo con F5.
Buongiorno,
ho provato la tua soluzione, modificando solo il foglio e togliendo textbox e label, ma mi evidenzia questa frase:
Set email = r.Find(ComboBox1, lookat:=xlWhole).Offset(, 1)
con il seguente messaggio: oggetto variabile o blocco with variabile non impostato.
però se provo in una nuova cartella, ricominciando da 0, e inserendo nel foglio1 nomi e email, funziona alla perfezione.
Comunque ho risolto mettendo un pulsante che mostra la userform nel foglio4, ma giusto per curiosità come si risolve l'arcano mistero che se le email sono ubicate in un foglio diverso da dove esce la userform non funziona, se la userform è nello stesso foglio dove ci sono le email funziona?
Ho provato inserendo il nome del foglio dove ci sono le email seguito da .Select, ho provato anche worksheets ma niente...
Ringrazio per l'aiuto ricevuto e buona festa della Liberazione.
Per sicurezza qualifica per esteso il riferimento al range "r" nell'evento Initialize del form:
Set r = worksheets("Foglio1").Range("A1").CurrentRegion.Resize(, 1)
dove al posto di foglio1 devi mettere il nome foglio dove si trovano i dati da pescare. Inoltre non devi digitare niente nella combobox: devi solo selezionare un nome esistente.
-
AutoreArticoli