Proměnné určitě používejte. Jenom musíte používat ty správné typy (chce to praxi). A pokud používáte Objekty, nejdříve se podívejte na vlastnosti (počet řádků v oblasti je
Range.Rows.Count - takže nemusíte definovat pole)
Pokud nevím jaký typ proměnné použít, používám následující trik:
definuji proměnnou typu variant a jeden řádek za přiřazením hodnoty do proměnné kód zastavím a ve VBE v okně Locals se podívám na typ, jaký proměnná má. Je tam potom napsané např: Variant/Range a vím, že to proměnná má být typu Range
Je třeba jen pamatovat (on vás kód na to stejně upozorní), že když přiřazujete do proměnné objektovou hodnotu, musíte použít Set
1. Ta tečka souvisí s tím With
takže
With Sheets("Pracovni").Columns(1)
Range(.Cells(2, 1), .Cells(2, 1).End(xlDown)).Offset(0, 1).FormulaR1C1 = "=AVERAGEIF(S_KONTRAKT,RC[-1],S_DATKONEC)"
End With 'Sheets("Pracovni").Columns(1)
je podobné jako
Range(Sheets("Pracovni").Columns(1).Cells(2, 1), Sheets("Pracovni").Columns(1).Cells(2, 1).End(xlDown)).Offset(0, 1).FormulaR1C1 = "=AVERAGEIF(S_KONTRAKT,RC[-1],S_DATKONEC)"
Bez tečky by to sice mohlo fungovat - ale bude to špatně, protože se to bude vztahovat k aktivnímu listu
(zrovna tady je výjimka,kdy to funguje, protože pokud máte aktivní list 'Pracovni' tak z tečkou je to stejná buňka jako bez tečky - nicméně stačí se přepnout na jiný list a už to bude dělat neplechu)
2. To zařídí End(xlDown)
Vlastně jsem uělal toto
.Cells(2, 1) - umístil jsem kurzor na buňku A2
.Cells(2, 1).End(xlDown) - stiskl jsem Ctrl+Shift+šipka dolů
.Offset(0, 1) - vybranou oblast jsem posunul o jeden sloupec doprava
a vyplnil
Stačí takto?
citovat