

VBA - napĺňanie ListBox-u procedúrou
Ahojte, viete niekto poradiť, prečo mi VBA nedovolí naplniť položku ListBoxu, pokiaľ je poradové číslo jej stĺpca viac ako jednociferné?
Problém spôsobuje riadok .lsbLRD.List(j, 10) = Sheets("RPNI").Range("Y" & i).Text kvôli číslu stĺpca 10.
With frmKarta
.lsbLRD.AddItem
.lsbLRD.List(j, 0) = Sheets("RPNI").Range("A" & i).Text
.lsbLRD.List(j, 9) = Sheets("RPNI").Range("X" & i).Text
.lsbLRD.List(j, 10) = Sheets("RPNI").Range("Y" & i).Text
End With
Počas behu, keď program narazí na uvedený riadok, dostanem chybové hlásenie:
Run-time error ´380´
Could not set the List property. Invalid property value
Poznámka: lsbLRD.ColumnCount=13 takže tým to nebude
Je tam obmedzenie na 10 stĺpcov v prípade, že mu nenastavíš zdroj dát: ListBox.ColumnCount Property
Uprav si to nejako takto:
Los ďakujem veľmi pekne, pomohlo, ale len čiastočne.
Moja definícia problému je, vzhľadom na poskytnuté riešenie, nedostatočná.
Riešenie funguje bezchybne pre pevné definovanie dvojrozmerného poľa.
Problém je však v tom, že počet riadkov nemôžem definovať pevne, je totiž premenný a zisťuje sa v inej procedúre a ukladá sa do verejnej premennej napr PocRiadkov.
Takže by som potreboval deklaráciu:
Dim A(0 To PocRiadkov, 0 To 26)
Takýto zápis však spôsobí chybu:
Constant expression required
Dá sa aj toto nejak ošetriť?
Díky
Nie, toto funguje pre ľubovoľný počet riadkov. Dôležité je na začiatku priradiť vlastný zdroj dát:
Potom môžeš volať AddItem a nastavovať obsah, ako len chceš.
Pre dynamickú alokáciu poľa slúži príkaz ReDim.
Žiaľ nefunguje... vlastný zdroj dát som priradil, spravil som dve verzie, jednu bez ReDim, druhú s ReDim s nasledovnými výsledkami:
(uvádzam celé procedúry, pričom RZapisu je definovaná v hlavnom module ako Public)
bez ReDim :
V tomto prípade dochádza k chybe, že žiada pevnú hodnotu, nie premennú... Constant expression required
s ReDim (skúška "prenásilnenia
) :
V tomto prípade hlási chybu, že pole už je definované... Array already dimensioned
Kde robím chybu?
Bez ReDim (na začiatku je RemoveItem, aby bolo pole prázdne):
S ReDim (už sa nevolá AddItem, pretože pole má požadovaný rozsah):
Som Ti veľmi vďačný, nebol by som sa z toho vymotal...
)
Proste sa z času na čas dostanem do stavu, keď mi žiadny manuál neporadí, lebo neviem, kde robím chybu a potom je rada skúsenejšieho neoceniteľná...
Teraz je to už jasné... (aspoň táto konkrétna vec
Ďakujem!