Inizializzazionem combobox con array



  • Inizializzazionem combobox con array
    di roberto21 data: 24/01/2015 19:20:49

    Proseguendo nei miei studi (?) sono incappato in questo problema: ho due userform con un combobox (ComboBoxNomeConto) in ognuna con le stesse proprietà (due colonne). Nella inizializzazione della userform2 preparo un array (5,2) e inizializzo la combobox con .list = MyArray. E tutto funziona, incluso il valore che mi ritorna la combobox dopo la selezione (.boundcolumn=2). Nella inizializzazione della userform1, preparo un array dinamico (size,2) e inizializzo la combobox con .list=MyArray. E non funziona niente. L'array sembra OK (verificato col debugger), ma nella combobox compare solo una colonna. Sembrerebbe la prima, ma siccome non compare nella casella dopo la selezione e il boundcolumn non funziona, forse non lo è. Allego il codice completo, anche se è sufficiente far andare l'inizializzazione e verificare il contenuto delle combobox nei due casi. Mi sfugge qualcosa di evidente che differenzia i due casi? Grazie.



  • di scossa data: 24/01/2015 20:32:32

    Ho solo dato uno sguardo veloce al codice:
    in VBA le matrici hanno indice 0 quindi con ReDim MyArray(Size, 2) As String tu crei un array a 3 colonne.

    O correggi in ReDim MyArray(Size, 1) As String e tutti i riferimenti (da 2 a 1 e da 1 a 0) o aggiungi Option Base 1 a inizio codice.



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di roberto21 (utente non iscritto) data: 25/01/2015 12:57:21

    Sì, mettendo in testa al codice di userform1
    option base 1
    la combobox relativa viene inizializzata correttamente. Grazie. Ma perchè l'altra funziona senza bisogno di questa aggiunta? Il codice mi sembra assolutamente identico. Forse la dichiarazione MyArray (1 to 5, 1 to 2) bypassa il problema?



  • di Vecchio Frac data: 25/01/2015 18:35:47

    Non lo "bypassa": tu dichiari esplicitamente che l'indice del tuo array parte da 1 e contiene cinque elementi.
    In pratica modifichi il comportamento default (gli indici degli array partono da zero) ma lo fai solo per quella variabile specifica: per esempio
    Dim arr1(7) ---> ha otto elementi, da zero a sette
    Dim arr2(1 to 8) ---> ha otto elementi, da uno a otto


    Mentre con la direttiva "Option Base 1" in testa al modulo tu vuoi che tutti gli array dichiarati partano da uno, anche se non lo specifichi.
    Option Base 1
    Dim arr1(7) ---> ha sette elementi, da uno a sette






  • di roberto21 (utente non iscritto) data: 25/01/2015 22:19:52

    Perfetto, grazie!!! Ne ho da imparare ancora...



  • di Vecchio Frac data: 04/03/2015 15:28:28

    Il sistema elimina gli allegati dopo otot giorni.
    Se hai un problema simile puoi esporlo aprendo una discussione nuova.