excel-vba 何时使用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
但是,当同时打开多个工作簿时-尤其是当从Excel加载项运行VBA代码时-对该引用的引用ActiveWorkbook可能会混淆或定向错误。例如,具有UDF的加载项会检查一天中的时间并将其与存储在其中一个加载项(通常用户不容易看到)中的值进行比较,则必须明确标识哪个工作簿是被引用。在我们的示例中,我们打开的(活动的)工作簿在单元格A1中具有一个公式,并且没有为该活动的工作簿编写任何VBA。在我们的外接程序中,我们具有以下用户定义函数(UDF):=EarlyOrLate()
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,那么它将永远无法保证要使用哪个工作簿。