› Sviluppare funzionalita su Microsoft Office con VBA › Inserire dati in listbox da ADO
-
AutoreArticoli
-
da threand 7410, ho scaricato il file postato da VF.
ho modificato la riga di codice cosiSet rs = cn.Execute("SELECT * FROM [Ordine$E1:K10000] WHERE [descrizione]like 'A%'")che mi seleziona tutti i record del campo descrizione che iniziano per A.
A questo punto ho inserito una form con dentro una listbox, e volevo inserire i record selezionati,
rs,nella listbox con questa riga di codiceUserForm1.ListBox1.List()=CopyFromRecordset rsniente.
A questo punto ho tentato altre strade, ma niente,-questa mia curiosita è solo a scopo didattico,-mica è una cosa non realizzabile?Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Bè il codice con cui riempi la Listbox è sbagliato perchè Copyfromrecordset è un metodo del foglio e si applica solo a un range, adesso non posso fermarmi per risponderti ma lo faccio appena rientro.
Grazie per la pazienza 🙂
Credo di aver risolto con il segue spezzone di codice
With UserForm1.ListBox1.ColumnCount = 3.ClearDo.AddItem.List(i, 0) = rs![descrizione].List(i, 1) = rs![um].List(i, 2) = rs![prezzo]i = i + 1rs.MoveNextLoop Until rs.EOFEnd WithUserForm1.ShowQual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Allora hai tre alternative:
1) come hai fatto tu, cicli attraverso il recordset e aggiungi item per item;
2) copy il recordset nel foglio e lo assegni con CopyFromrecordset a una cella (poniamo A1), poi assegni alla proprietà RowSource della Combobox l'indirizzo della tabella creata così::
Set rs = cn.Execute("SELECT descrizione FROM [Ordine$E1:K10000] WHERE [quantità]>0") Cells(1, "A").CopyFromRecordset rs ComboBox1.RowSource = Range("A1").CurrentRegion.Address3) recuperi il contenuto del recordset con getRows assegnandolo a una variabile variant (che diventa bidimensionale), poi assegni alla proprietà List della tua combobox il vettore appena riempito, ricordandoti di trasporlo per recuperare il secondo indice (GetRows restituisce colonne, righe e tu invece devi passare a .List righe, colonne):
Set rs = cn.Execute("SELECT descrizione FROM [Ordine$E1:K10000] WHERE [quantità]>0") Cells(1, "A").CopyFromRecordset rs rs.movefirst v = rs.getrows() ComboBox1.List = Application.Transpose(v)Intanto grazie per la risposta, e scusa il ritardo per la risposta.
Sono come San Tommaso,intanto debbo inserire i dati in una listbox,ma questo non è un problema,
ho inserito il tuo codiceCells(1, "A").CopyFromRecordset rsUserForm1.ListBox1.RowSource = Range("A1").CurrentRegion.Addressma mi inserisce solamente i dati della colonna A del foglio, e non tutti i campi del record
il secondo codice
Cells(1, "A").CopyFromRecordset rsrs.movefirstv = rs.getrows()UserForm1.ListBox1.List = Application.Transpose(v)alla riga Appliaction.transpore mi dice dato non corrispondente, pero dalla finestra di
debug vedo che v è regolarmente inizializzata come array e leggo i valori.Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )albatros54 wrote:ma mi inserisce solamente i dati della colonna A del foglio, e non tutti i campi del record
Uhm, allora bisogna vedere come è impostato il Combobox (numero di colonne e larghezza)
albatros54 wrote:Application.transpose mi dice dato non corrispondente
Uhm bis, vorrei vedere l'esempio 😀
albatros54 wrote:ma mi inserisce solamente i dati della colonna A del foglio
questo l'ho risolto inizializzando la listbox1 con 3 colonne
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Per il secondo codice, più carino (con GetRows), secondo me si tratta solo di impostare correttamente la listbox come hai fatto per il primo esempio 🙂 e naturalmente devi aver dimensionato v as variant.
l'esempio è il file che tu hai postato #7410 ("Copia-di-catalogo-x-ufficio-2.9_VF2-1), non l'ho modificato ,ho aggiunto solomante nel file una userform con dentro un listbox , è ho inserito le righe di codice nel codice esistente.
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Bene, allora appena riesco ci metto mano e vedrai che lo facciamo funzionare 🙂
vecchio frac wrote:Per il secondo codice, più carino (con GetRows)
si pero No Good!!
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )al posto di transpose bisogna inserire questa riga di codice
UserForm1.ListBox1.Column = (v)che inverte le colonne con le righe, una specie di transpose
e tutto funziona
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Sono perplesso e voglio verificarlo... assegni alla proprietà Column un valore stringa che contiene il recordset?
preso dall'help di excel vba
Durante il caricamento la proprietà Column inverte gli elementi della matrice.sempre dall'help
<strong>Nota</strong> Quando si copiano i dati da una matrice bidimensionale, la proprietà Column traspone il contenuto della matrice nel controllo, in modo che il contenuto di ListBox1.Column(X, Y) corrisponda a quello di MyArray(Y, X). Per copiare una matrice senza trasporla è possibile utilizzare la proprietà <strong>List</strong>.Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Grande Albatros
-
AutoreArticoli
