Welchen Unterschied macht es, wenn man einen VBA-Code in "Sheets" ("Sheet1", "Sheet2" usw.), in "ThisWorkbook" und in "Modules" ("Module1" etc) ausführt?
Mit anderen Worten, welche sollte in welchen Fällen verwendet werden?
Ein Modul ist eine Sammlung ähnlicher Funktionen und Unterroutinen, die normalerweise nach ihrer Funktionalität gruppiert sind.
In einem Modul-Unterprogramm / Funktion Privat : Funktionen und Unterprogramme sind nur innerhalb dieses Moduls verfügbar. Öffentlich : Sie können von überall direkt darauf zugreifen. (Ein anderes Modul, anderes Makro usw.) Es ist üblich, Dienstprogrammfunktionen in Modulen zu speichern.
Option Private Module
, was dazu führt, dass das Modul selbst privat ist, kann oben in jedem Standardmodul hinzugefügt werden, ist aber für ein Objektmodul wie ThisWorkbook oder Sheet1 usw. nicht erlaubt.
ThisWorkbook ist ein privates Modul des Arbeitsmappenobjekts. Zum Beispiel befindet sich die Workbook_Open () , Workbook_Close () -Routine in diesem Modul. ( Referenz zum Arbeitsmappenobjekt )
Ebenso sind Sheet1, Sheet2 private Module der einzelnen Sheets. In ihnen würden Sie spezifische Funktionen für dieses Blatt einfügen. Worksheet_Activate , Worksheet_Deactivate , Workbook_SheetChange sind Standardereignisse, die Ihnen zur Verfügung gestellt werden, damit Sie sie innerhalb des entsprechenden privaten Arbeitsblatts Module. ( Worksheet-Objektreferenz )
Wie @Daniel Cook in den Kommentaren sagte, während ThisWorkbook und die Module des WorkSheets nicht zur direkten Verwendung als subName()
oder functionName()
außerhalb des Moduls verfügbar sind, ist es immer noch möglich, sie mit ThisWorkbook.subName()
oder% aufzurufen. co_de%
Ein Klassenmodul ist dem OOP in VBA am nächsten. Sie haben Konstruktoren, Destruktoren und können instanziiert werden, um Ihnen Klassenobjekte zu geben.
Ich weiß zumindest, dass Modules
ausgeführt werden muss und ThisWorkBook
für Ereignisse wie SheetChange
event etc.
Gemeinsamer Code wird in ThisWorkBook
ausgegeben:
Diese Frage ist auch hier schon beantwortet:
Tags und Links excel excel-vba spreadsheet