Articles

excel-vba When To Use ActiveWorkbook and ThisWorkbook

Beispiel

Es ist eine bewährte VBA-Praxis, immer anzugeben, auf welche Arbeitsmappe sich der VBA-Code bezieht. Wird diese Angabe weggelassen, geht VBA davon aus, dass sich der Code auf die derzeit aktive Arbeitsmappe (ActiveWorkbook) bezieht.

'--- the currently active workbook (and worksheet) is impliedRange("A1").value = 3.1415Cells(1, 1).value = 3.1415

Wenn jedoch mehrere Arbeitsmappen gleichzeitig geöffnet sind – insbesondere und vor allem, wenn der VBA-Code von einem Excel-Add-In ausgeführt wird – können Verweise auf die ActiveWorkbook verwechselt oder fehlgeleitet werden. Ein Add-In mit einer UDF, die die Uhrzeit prüft und mit einem Wert vergleicht, der auf einem der Arbeitsblätter des Add-Ins gespeichert ist (die in der Regel für den Benutzer nicht ohne weiteres sichtbar sind), muss beispielsweise explizit angeben, auf welche Arbeitsmappe verwiesen wird. In unserem Beispiel hat unsere geöffnete (und aktive) Arbeitsmappe eine Formel in Zelle A1 =EarlyOrLate() und es wurde KEINE VBA für diese aktive Arbeitsmappe geschrieben. In unserem Add-In haben wir die folgende benutzerdefinierte Funktion (UDF):

Public Function EarlyOrLate() As String If Hour(Now) > ThisWorkbook.Sheets("WatchTime").Range("A1") Then EarlyOrLate = "It's Late!" Else EarlyOrLate = "It's Early!" End IfEnd Function

Der Code für die UDF wird in dem installierten Excel-Add-In geschrieben und gespeichert. Sie verwendet Daten, die auf einem Arbeitsblatt im Add-In namens „WatchTime“ gespeichert sind. Wenn die UDF ActiveWorkbook anstelle von ThisWorkbook verwendet hätte, könnte sie niemals garantieren, welche Arbeitsmappe gemeint ist.

Eine Antwort schreiben

Deine E-Mail-Adresse wird nicht veröffentlicht.