Denna handledning kommer att diskutera skillnaden mellan VBA ActiveWorkbook och ThisWorkbook.
ActiveWorkbook vs. ThisWorkbook
Det är viktigt att veta skillnaden mellan ActiveWorkbook och ThisWorkbook i VBA:
ActiveWorkbook är den arbetsbok som för närvarande är aktiv (ungefär som ActiveSheet är det aktuella arket). ThisWorkbook är arbetsboken där VBA -koden lagras. Denna arbetsbok kommer aldrig att förändras.
Denna arbetsbok
Tänk på ThisWorkbook som en objektvariabel som låter dig referera till arbetsboken som innehåller den kod som för närvarande körs.
Denna kod kommer att visa en MessageBox med ThisWorkbook -namn:
123 | Sub Show_ThisWorkbook ()MsgBox ThisWorkbook.NameAvsluta Sub |
ActiveWorkbook
ActiveWorkbook är en objektvariabel som låter dig referera till den aktiva arbetsboken.
Denna kod kommer att visa en MessageBox med ActiveWorkbook -namn:
123 | Sub Show_ActiveWorkbook ()MsgBox ActiveWorkbook.NameAvsluta Sub |
VBA antar ActiveWorkbook
När du försöker arbeta med objekt (t.ex. ark) i ActiveWorkbook behöver du inte uttryckligen ange ActiveWorkbook -objektet. VBA antar att du hänvisar till ActiveWorkbook.
Så det här:
1 | ActiveWorkbook.Sheets ("Sheet1"). Intervall ("$ A $ 5"). Value = 1 |
Är det samma som detta:
1 | Ark ("Ark1"). Område ("$ A $ 5"). Värde = 1 |
Nya eller öppnade arbetsböcker är aktiva
När du skapar en ny arbetsbok eller öppnar en arbetsbok blir arbetsboken ”Aktiv”. Du kan se själv med den här koden som lägger till en arbetsbok och hämtar den nya arbetsbokens namn:
1234 | Sub Show_ActiveWorkbook_Add ()Arbetsböcker.Lägg tillMsgBox ActiveWorkbook.NameAvsluta Sub |
När du har lagt till eller öppnat en arbetsbok kan du tilldela den till en variabel med hjälp av ActiveWorkbook -objektet. Vi visar dig hur i exemplen nedan:
ThisWorkbook och ActiveWorkbook Exempel
Byt aktiv arbetsbok
Byt den aktiva arbetsboken med hjälp av arbetsbokens namn:
1 | Arbetsböcker ("Bok1"). Aktivera |
Byt den aktiva arbetsboken med hjälp av arbetsbladets ordernummer (1 är det första kalkylbladet i en arbetsbok)
1 | Arbetsböcker (1) .Aktivera |
Gör ThisWorkbook Active
Gör ThisWorkbook (där den nuvarande koden är lagrad) till ActiveWorkbook:
1 | ThisWorkbook.Activate |
Ställ in ActiveWorkbook på en variabel
Tilldela ActiveWorkbook till en arbetsbokobjektvariabel:
12 | Dim wb Som arbetsbokAnge wb = ActiveWorkbook |
Stäng och spara den aktiva arbetsboken
Stänger och sparar ActiveWorkbook:
1 | ActiveWorkbook.Close SaveChanges: = True |
Stäng den aktiva arbetsboken utan att spara
Stänger ActiveWorkbook utan att spara:
1 | ActiveWorkbook.Close SaveChanges: = False |
ActiveWorkbook - Spara som
Utför en Spara som i den aktiva arbetsboken.
123456789 | Sub SaveAsActiveWorkbook ()Dim resultat Som variantresult = Application.GetSaveAsFilename (InitialFileName: = "", _FileFilter: = "Macro-aktiverad arbetsbok i Excel ( *.xlsm), *.xlsm, Excel-arbetsbok ( *.xlsx), *.xlsx")Om resultat = falskt, returnera sedanActiveWorkbook.SaveAs resultatAvsluta Sub |