Denne vejledning vil diskutere forskellen mellem VBA ActiveWorkbook og ThisWorkbook.
ActiveWorkbook vs. ThisWorkbook
Det er vigtigt at kende forskellen mellem ActiveWorkbook og ThisWorkbook i VBA:
ActiveWorkbook er den projektmappe, der i øjeblikket er aktiv (ligner hvordan ActiveSheet er det aktuelt aktive ark). ThisWorkbook er den projektmappe, hvor VBA -koden er gemt. Denne arbejdsbog vil aldrig ændre sig.
Denne arbejdsbog
Tænk på ThisWorkbook som en objektvariabel, der giver dig mulighed for at referere til projektmappen, der indeholder den aktuelt kørende kode.
Denne kode viser en MessageBox med ThisWorkbook -navn:
123 | Sub Show_ThisWorkbook ()MsgBox ThisWorkbook.NameAfslut Sub |
ActiveWorkbook
ActiveWorkbook er en objektvariabel, der giver dig mulighed for at referere til den aktuelt aktive projektmappe.
Denne kode viser en MessageBox med ActiveWorkbook -navn:
123 | Sub Show_ActiveWorkbook ()MsgBox ActiveWorkbook.NameAfslut Sub |
VBA antager ActiveWorkbook
Når du forsøger at arbejde med objekter (f.eks. Ark) i ActiveWorkbook, behøver du ikke eksplicit at angive ActiveWorkbook -objektet. VBA antager, at du refererer til ActiveWorkbook.
Så dette:
1 | ActiveWorkbook.Sheets ("Sheet1"). Område ("$ A $ 5"). Værdi = 1 |
Er det samme som dette:
1 | Ark ("Ark1"). Område ("$ A $ 5"). Værdi = 1 |
Nye eller åbnede projektmapper er aktive
Når du opretter en ny projektmappe eller åbner en projektmappe, bliver projektmappen "Aktiv". Du kan selv se med denne kode, der tilføjer en projektmappe og henter den nye projektmappes navn:
1234 | Sub Show_ActiveWorkbook_Add ()Workbooks.AddMsgBox ActiveWorkbook.NameAfslut Sub |
Når du har tilføjet eller åbnet en projektmappe, kan du tildele den til en variabel ved hjælp af ActiveWorkbook -objektet. Vi viser dig hvordan i eksemplerne herunder:
ThisWorkbook og ActiveWorkbook Eksempler
Skift aktiv projektmappe
Skift den aktive projektmappe ved hjælp af projektmappens navn:
1 | Arbejdsbøger ("Bog1"). Aktiver |
Skift den aktive projektmappe ved hjælp af regnearks ordrenummer (1 er det første regneark i en projektmappe)
1 | Arbejdsbøger (1) .Aktiver |
Gør ThisWorkbook aktiv
Gør ThisWorkbook (hvor den aktuelt kørende kode er gemt) til ActiveWorkbook:
1 | ThisWorkbook.Activate |
Indstil ActiveWorkbook til en variabel
Tildel ActiveWorkbook til en projektmappeobjektvariabel:
12 | Dim wb Som projektmappeIndstil wb = ActiveWorkbook |
Luk og gem den aktive projektmappe
Lukker og gemmer ActiveWorkbook:
1 | ActiveWorkbook.Close SaveChanges: = True |
Luk den aktive projektmappe uden at gemme
Lukker ActiveWorkbook uden at gemme:
1 | ActiveWorkbook.Close SaveChanges: = Falsk |
ActiveWorkbook - Gem som
Udfører en gem som i den aktive projektmappe.
123456789 | Sub SaveAsActiveWorkbook ()Dim resultat Som variantresult = Application.GetSaveAsFilename (InitialFileName: = "", _FileFilter: = "Excel makroaktiveret projektmappe ( *.xlsm), *.xlsm, Excel-projektmappe ( *.xlsx), *.xlsx")Hvis resultat = Falsk ReturActiveWorkbook.SaveAs resultatAfslut Sub |