VBA användning av thisWorkbook

Hur skiljer sig skapandet av en ny modul från att lägga in saker i thisWorkbook?

ThisWorkbook är värddokumentet. Det representerar Workbook objektet som innehåller VBA-projektet. Liksom varje Workbook-objekt reagerar det på Workbook-händelser.

ThisWorkbook är tillsammans med varje ”SheetX”-modul en speciell typ av klassmodul som VBA förstår som ”dokumentmoduler” – dessa speciella moduler kan inte läggas till eller tas bort. Värdprogrammet (här Excel) ansvarar för dessa: För att lägga till en arbetsbladsmodul måste du lägga till ett arbetsblad i arbetsboken. VBA-kod kan inte New upp en dokumentmodul; du måste använda bibliotekets tillhandahållna fabriksmetoder för att skapa dem (det är .Workbooks.Open, .Workbooks.Add, .Worksheets.Add).

Som objekt kan du inte åberopa deras offentliga medlemmar utan att ha en instans av det. ThisWorkbook definierar ett objekt som lämpligen heter ThisWorkbook, så du kan anropa dess medlemmar genom att kvalificera medlemsanropet med ThisWorkbook:

ThisWorkbook.SomePublicProcedure "arg1", arg2, 42

Samma sak med arbetsbladsmoduler, förutom att dessa definierar ett objekt som är uppkallat efter modulens (Name)-egenskap – som standard är (Name)-egenskapen för bladet ”Sheet1” Sheet1, så du kan kvalificera det så här:

Sheet1.SomePublicProcedure "arg1", arg2, 42

ThisWorkbook exponerar offentliga användarprocedurer, plus varje medlem som ärvs från Workbook; Sheet1 exponerar offentliga användarprocedurer, plus varje medlem som ärvs från Worksheet.

Vad SKA jag lägga in i thisWorkbook?

Allt som hör hemma på arbetsboksnivå. Det vill säga kod som påverkar värddokumentet. Det skulle främst vara procedurer för hantering av händelser, till exempel en handläggare för händelsen Open, som anropas när arbetsboken öppnas (med makron aktiverade) i Excel.

Du vill ha så lite kod som möjligt i varje dokuments code-behind, så att dina händelsestoppare helt enkelt anropar procedurer som svar på händelserna:

Private Sub Workbook_Open() DoSomethingEnd Sub

Varvid DoSomething skulle vara en Public Sub i en standardmodul.

finns det något sätt att komma åt funktionerna från thisWorkbook (eller någon specifik arkmodul från Excel-gränssnittet?

Det vill du inte göra. Men du kan om du vill tilldela ett makro till en Public Sub definierad i ThisWorkbook:

Bemärk att makrot kvalificeras med ThisWorkbooks objektnamn.

Normalt sett vill du att dina makron definieras i standardmoduler. Standardmoduler är inte objekt och kan inte instansieras. En offentlig procedur i en standardmodul är tillgänglig var som helst i projektet, och om det inte står Option Private Module överst, kommer dess offentliga medlemmar att vara lättillgängliga för Excel.

Om du menar ”tillgänglig för Excel” som ”som jag kan använda i en formel”, menar du ”exponerad som en UDF”, och dessa, liksom makron, hör hemma i en standardmodul, inte ThisWorkbook.

Lämna ett svar

Din e-postadress kommer inte publiceras.