何時使用 ActiveWorkbook 和 ThisWorkbook
這是一個 VBA 最佳實踐,總是指定你的 VBA 程式碼引用哪個工作簿。如果省略此規範,則 VBA 假定程式碼指向當前活動的工作簿(ActiveWorkbook
)。
'--- the currently active workbook (and worksheet) is implied
Range("A1").value = 3.1415
Cells(1, 1).value = 3.1415
但是,當多個工作簿同時開啟時 - 特別是當 VBA 程式碼從 Excel 載入項執行時 - 對 ActiveWorkbook
的引用可能會混淆或誤導。例如,帶有 UDF 的載入項檢查一天中的時間並將其與儲存在其中一個載入項工作表(通常使用者不易看到)上的值進行比較,必須明確標識哪個工作簿是被引用。在我們的示例中,我們的開放(和活動)工作簿在單元格 A1 =EarlyOrLate()
中有一個公式,並且沒有為該活動工作簿編寫任何 VBA。在我們的外掛中,我們有以下使用者定義函式(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 If
End Function
UDF 的程式碼已編寫並儲存在已安裝的 Excel 載入項中。它使用儲存在名為 WatchTime
的載入項中的工作表上的資料。如果 UDF 使用了 ActiveWorkbook
而不是 ThisWorkbook
,那麼它永遠無法保證哪個工作簿是預期的。