Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Excel 2003 vs novšie verzie - VBA

Tak na dynamické objekty už jsi odkaz dostal. Tím nastrkáním do polí myslím práci ve VBA, kdy si objekty (resp. odkazy na ně) vložíš do pole a pak na ně odkazuješ přes to pole. Příklad:

Rem Deklarace pole pro ulozeni odkazu na ComboBoxy ve Frame1 (dynamicke pole)
Dim aCbxFrm1() As Variant

Rem Pridani odkazu na ComboBox do pole
Pocet = Pocet + 1                 ' Promenna POCET obsahuje pocet doposud nactenych comboboxu
ReDim aCbxFrm1(Pocet) Preserve    ' Predeklarovani pole (zvetseni o 1)
Set aCbxFrm1(Pocet) = CbxVyber1   ' Prirazeni odkazu na ComboBox, pojmenovany "CbxVyber1"

Rem Prace s Comboboxy pomoci odkazu v poli
Vyber = aCbxFrm1(1).ListIndex     ' Zjisteni vybrane polozky v Comboboxu
For i = 1 to UBound(aCbxFrm1)     ' Cyklus pres vsechyn Comboboxy v poli
  aCbxFrm1(i).ForeColor = -2147483630   ' Zmena barvy popredi vsech Comboboxu
Next i
Filozofie přístupu je myslím z příkladu zřejmá.
Dále, co jsem se ještě zběžně díval, bych Ti doporučil:
- vše z procedury UserForm_Activate přesuň do UserForm_Initialize
- na začátek této části přidej "Application.ScreenUpdating = False" a na konec "Application.ScreenUpdating = True"
- v těch jednotlivých procedurách "nacitajxx" a "naplnxx" vymaž přepínače překreslování obrazovky (Application.ScreenUpdating = False/True). To by mělo odstranit to blikání při startu aplikace
- dále doporučuji vytvořit zkratku na worksheet, zjednoduší to práci (zejména pokud bys potřeboval ten list přejmenovat) a zpřehlední kód:
Rem Deklarace promenne
Dim wsh1 As Worksheet  

Rem Prirazeni
Set wsh1 = ThisWorkbook.Worksheets("Sheet1")

Rem Prace s odkazem (zkrati a zprehledni se kod programu)
UserForm1.CheckBox5 = wsh1.CheckBox5
- na začátku máš poměrně velké zdržení, než všechno načteš z listu do formuláře. Pamatuj, že nejpomalejší je vždy přesun dat mezi listem a VBA kódem. Pokud něco takového potřebuješ, vždy je lepší načíst si potřebný obsah jedním příkazem z listu do nějakého pomocného pole (je jedno, jestli načítáš jednu buňku nebo třeba 10000 buněk) a pole si zpracovat v makru. Musel bys ale předělat ovládací prvky v listu - místo ovládacích prvků ActiveX použít formulářové ovládací prvky, u nichž si můžeš nastavit, s kterou buňkou budou svázány. Tyto buňky si pak nastavit na druhý list a pak komunikovat právě prostřednictvím toho druhého listu. Ale to je práce na delší dobu, ber to spíš jako doporučení pro další projekty.
- pokud to s VBA myslíš vážně, doporučuji tuhle knihu. Sám ji mám pro Excel 2003 a většinu zde uvedených tipů mám právě z té knihy, nemůžu si ji vynachválit.

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny