VBA thisWorkbook usage

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.

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.