Inizializzazionem combobox con array
Hai un problema con Excel? 
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.
Vuoi Approfondire?