› Excel e gli applicativi Microsoft Office › Popolare textbox e listbox da combobox
-
AutoreArticoli
-
Ciao a tutti,
gentilmente avrei bisogno del vostro aiuto per risolvere il mio problema.
Ho una combobox che prende i dati da "Sheet2!A3:A39". Io vorrei che scegliendo un valore le altre textbox (7, 14 e 6) e la listbox si popolassero con i relativi dati della stessa riga.
Esempio: valore combobox A30 - Textbox7 --->B30; textbox14-----> C30; Textbox6 ----> D30; listbox1 ---->da E30:N30
In allegato troverete un file di esempio.(P.s. le textbox sono numerate normalmente)
Spero di aver chiarito, in tal caso chiedete pure.
Grazie in anticipo per la disponibilità e buona continuazione.
Allegati:
You must be logged in to view attached files.Ok, il tuo quesito è chiaro, tu devi intercettare l'evento che risponde all'aggiornamento della combobox, recuperando così il valore scelto, poi con .Find applicato al range della colonna A del database individui il valore selezionato, da lì ottieni un riferimento preciso alla riga dei dati che ti servono e li recuperi in modo semplice assegnandoli alle textbox e al listbox.
Buongiorno,
si esatto...hai centrato il punto in pieno..
Faresti un esempio gentilmente per farmi capire?
Grazie mille per aver risposto
Parti dalla prima cosa da fare: scrivere il codice che intercetta l'evento che si scatena dopo l'aggiornamento del controllo. Quindi apri l'editor di VBA, apri l'userform e fai doppio click sul combobox. L'editor ti posiziona subito in una porzione di codice che per default prevede l'evento Change. Per vedere se funziona davvero puoi farti mostrare in una message box il risultato ottenuto:
Option Explicit Private Sub ComboBox1_Change() MsgBox "Hai selezionato " & ComboBox1 End SubScoprirai poi che magari Change non è l'evento migliore (perchè intercetta ogni pressione di tasto, mentre AfterUpdate controlla solo quando è stato scelto un valore diverso dal precedente).
A questo punto hai la possibilità di cercare il valore selezionato nel range del foglio2 che contiene i dati. Il metodo che permette questo è Find:
Option Explicit Private Sub ComboBox1_Change() Dim r As Range MsgBox "hai selezionato " & ComboBox1 Set r = Worksheets("Sheet2").Range("A:A").Find(ComboBox1) MsgBox "Il valore " & ComboBox1 & " è in riga " & r.Row End SubOra spiegami cosa fa il codice che ho appena mostrato e perchè, e come puoi sfruttare questo fatto pe ri tuoi scopi
Eccomi..
Ho scritto questo che fa quello che chiedo (per adesso solo per le textbox):
Dim lng As Integer lng = ComboBox3.ListIndex + 1 TextBox1.Text = Sheets("Sheet2").Range("c3:c39")(lng) TextBox2.Text = Sheets("Sheet2").Range("d3:d39")(lng) TextBox3.Text = Sheets("Sheet2").Range("b3:b39")(lng) End Sub Private Sub UserForm_Initialize() ComboBox3.RowSource = "Sheet2!A3:A39" End SubOra provo anche la tua versione
, grazie milleSe nella combobox scrivo un numero qualsiasi, il msgbox mi dice dove è ubicato la riga di quel valore.
Me la conserverò tra le mie "scartoffie"
dopo che naturalmente ci avrò fatto tutte le prove possibili.E' abbastanza rischioso riferirsi all'indice del range che contiene il valore cercato (se inserisci una riga nel database puoi verificare che si sballa tutto).
Option Explicit Private Sub ComboBox1_Change() Dim r As Range Set r = Worksheets("Sheet2").Range("A:A").Find(ComboBox1) textbox1 = r.Offset(, 2) textbox2 = r.Offset(, 3) textbox3 = r.Offset(, 1) End SubTi propongo questa variante. Non tenerla in disparte ma falla tua e ti darà soddisfazioni 🙂
Grazie mille davvero!
Effettivamente non avevo dato conto che se aggiungo una riga poteva darmi problemi
.Per quanto riguarda la listbox, dovrei inserire la cella di partenza (E) giusto?
Grazie ancora!
La Listbox, se la imposti come multicolonna, può ricevere tutti i campi interessati con l'apposita sintassi (vedi la guida in linea).
-
AutoreArticoli
