jak se liší vytvoření nového modulu od vložení věcí do thisWorkbook?
ThisWorkbook
je hostitelský dokument. Představuje objekt Workbook
, který obsahuje projekt VBA. Jako každý objekt Workbook
reaguje na události Workbook
.
ThisWorkbook
je spolu s každým modulem „SheetX“ zvláštním druhem modulu třídy, který VBA chápe jako „modul dokumentu“ – tyto speciální moduly nelze přidávat ani odebírat. Za ty je zodpovědná hostitelská aplikace (zde Excel): Chcete-li přidat modul listu, musíte do sešitu přidat list. Kód VBA nemůže New
vytvořit modul dokumentu; k jejich vytvoření musíte použít tovární metody poskytované knihovnou (to jsou .Workbooks.Open
, .Workbooks.Add
, .Worksheets.Add
).
Jako objekty nemůžete vyvolat jejich veřejné členy, aniž byste měli jejich instanci. ThisWorkbook
definuje objekt, který se příhodně jmenuje ThisWorkbook
, takže jeho členy můžete vyvolat kvalifikováním volání člena pomocí ThisWorkbook
:
ThisWorkbook.SomePublicProcedure "arg1", arg2, 42
Také u modulů pracovních listů, jenže ty definují objekt, který se jmenuje podle vlastnosti modulu (Name)
– standardně je vlastnost (Name)
listu „Sheet1“ Sheet1
, takže ji můžete kvalifikovat takto:
Sheet1.SomePublicProcedure "arg1", arg2, 42
ThisWorkbook
vystavuje veřejné uživatelské procedury plus každý člen zděděný z Workbook
; Sheet1
vystavuje veřejné uživatelské procedury plus každý člen zděděný z Worksheet
.
co MUSÍM vložit do tohoto sešitu?
Vše, co patří na úroveň sešitu. Tedy kód, který ovlivňuje hostitelský dokument. To by byly většinou procedury obsluhy událostí, například obsluha události Open
, se vyvolá při otevření sešitu (se zapnutými makry) v Excelu.
Chcete mít v kódu jakéhokoli dokumentu co nejméně kódu, takže vaše obsluhy událostí jednoduše volají procedury v reakci na události:
Private Sub Workbook_Open() DoSomethingEnd Sub
Kde DoSomething
by byl Public Sub
ve standardním modulu.
existuje nějaký způsob, jak přistupovat k funkcím z thisWorkbook (nebo nějakého konkrétního modulu listu z uživatelského rozhraní Excelu?
To přece nechcete. Ale můžete, pokud chcete, přiřadit makro k objektu Public Sub
definovanému v ThisWorkbook
:
Všimněte si, že makro je kvalifikováno názvem objektu ThisWorkbook
.
Obvykle byste chtěli mít makra definovaná ve standardních modulech. Standardní moduly nejsou objekty a nelze je instancovat. Veřejná procedura ve standardním modulu je přístupná odkudkoli z projektu, a pokud není nahoře napsáno Option Private Module
, budou její veřejné členy snadno dostupné Excelu.
Pokud máte na mysli „dostupné Excelu“ jako „které mohu použít ve vzorci“, pak máte na mysli „vystavené jako UDF“, a ty stejně jako makra patří do standardního modulu, nikoli do ThisWorkbook
.
.