Sviluppare funzionalita su Microsoft Office con VBA Inserire dati in listbox da ADO

Login Registrati
Stai vedendo 15 articoli - dal 1 a 15 (di 15 totali)
  • Autore
    Articoli
  • #7619 Score: 0 | Risposta

    albatros54
    Moderatore
      89 pts

      da threand 7410, ho scaricato il file postato da VF.
      ho modificato la riga di codice cosi

      Set 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 codice

      UserForm1.ListBox1.List()=CopyFromRecordset rs

      niente.
      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 )
      #7621 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        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 🙂

        #7623 Score: 0 | Risposta

        albatros54
        Moderatore
          89 pts

          Credo di aver  risolto con il segue spezzone di codice  

          With UserForm1.ListBox1
          .ColumnCount = 3
          .Clear
          Do
          .AddItem
          .List(i, 0) = rs![descrizione]
          .List(i, 1) = rs![um]
          .List(i, 2) = rs![prezzo]
          i = i + 1
          rs.MoveNext
          Loop Until rs.EOF

          End With
          UserForm1.Show

           

          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 )
          #7629 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            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.Address

            3) 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)
            
            #7647 Score: 0 | Risposta

            albatros54
            Moderatore
              89 pts

              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 codice

              Cells(1, "A").CopyFromRecordset rs
              UserForm1.ListBox1.RowSource = Range("A1").CurrentRegion.Address

              ma mi inserisce solamente i dati della colonna A del foglio, e non tutti i campi del record

              il secondo codice

              Cells(1, "A").CopyFromRecordset rs
              rs.movefirst
              v = 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 )
              #7653 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                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 😀

                #7654 Score: 0 | Risposta

                albatros54
                Moderatore
                  89 pts

                  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 )
                  #7655 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    272 pts

                    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.

                    #7656 Score: 0 | Risposta

                    albatros54
                    Moderatore
                      89 pts

                      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 )
                      #7658 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        272 pts

                        Bene, allora appena riesco ci metto mano e vedrai che lo facciamo funzionare 🙂

                        #7659 Score: 0 | Risposta

                        albatros54
                        Moderatore
                          89 pts

                          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 )
                          #7661 Score: 0 | Risposta

                          albatros54
                          Moderatore
                            89 pts

                            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 )
                            #7663 Score: 0 | Risposta

                            vecchio frac
                            Senior Moderator
                              272 pts

                              Sono perplesso e voglio verificarlo... assegni alla proprietà Column un valore stringa che contiene il recordset?   

                              #7664 Score: 1 | Risposta

                              albatros54
                              Moderatore
                                89 pts

                                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 )
                                #7672 Score: 0 | Risposta

                                vecchio frac
                                Senior Moderator
                                  272 pts

                                  Grande Albatros   

                                Login Registrati
                                Stai vedendo 15 articoli - dal 1 a 15 (di 15 totali)
                                Rispondi a: Inserire dati in listbox da ADO
                                Gli allegati sono permessi solo ad utenti REGISTRATI
                                Le tue informazioni: