Excel e gli applicativi Microsoft Office Popolare textbox e listbox da combobox

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

    Gret
    Partecipante

      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.
      #16834 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        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.

        #16847 Score: 0 | Risposta

        Gret
        Partecipante

          Buongiorno,

          si esatto...hai centrato il punto in pieno..

          Faresti un esempio gentilmente per farmi capire?

          Grazie mille per aver risposto  

          #16849 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            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 Sub

            Scoprirai 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 Sub

            Ora spiegami cosa fa il codice che ho appena mostrato e perchè, e come puoi sfruttare questo fatto pe ri tuoi scopi   

             

            #16850 Score: 0 | Risposta

            Gret
            Partecipante

              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 Sub
              

              Ora provo anche la tua versione , grazie mille

               

              #16852 Score: 0 | Risposta

              Gret
              Partecipante

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

                 

                #16854 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  272 pts

                  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 Sub

                  Ti propongo questa variante. Non tenerla in disparte ma falla tua e ti darà soddisfazioni 🙂

                  #16855 Score: 0 | Risposta

                  Gret
                  Partecipante

                    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!

                     

                    #16859 Score: 0 | Risposta

                    vecchio frac
                    Senior Moderator
                      272 pts

                      La Listbox, se la imposti come multicolonna, può ricevere tutti i campi interessati con l'apposita sintassi (vedi la guida in linea).

                    Login Registrati
                    Stai vedendo 9 articoli - dal 1 a 9 (di 9 totali)
                    Rispondi a: Popolare textbox e listbox da combobox
                    Gli allegati sono permessi solo ad utenti REGISTRATI
                    Le tue informazioni: