何時使用 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,那麼它永遠無法保證哪個工作簿是預期的。