【发布时间】:2015-05-13 00:32:26
【问题描述】:
上下文:Excel 2013 VBA。使用插件时,术语“ActiveWorkBook”应该是指正在编辑的文档,而“ThisWorkBook”是指后台的插件。考虑代码
在插件的 ThisWorkBook 模块中
Private WithEvents App As Application
Private Sub Workbook_Open()
Set App = Application
End Sub
Private Sub App_WorkBookOpen(ByVal Wb As Workbook)
MsgBox Wb.Name & " " & Wb.Worksheets(1).Cells(1, 1)
If Wb.Worksheets(1).Cells(1, 1) = "AAA" Then
MsgBox "Cell OK",
MsgBox ActiveWork.Name
End If
End Sub
加载项已启用,Excel 已启动。到目前为止,一切都很好。现在,如果我在 Sheet1 的单元格(1,1)中打开一个包含“AAA”的文件“Book1”,我会收到:
“Book1.xlsm AAA”(在消息框中,如预期的那样),然后是“Cell OK”,如预期的那样。
但随后出现错误“Object Required”,指的是 MsgBox“ActiveWorkBook.Name”行,因此此时 Book1 还不是 ActiveWorkBook。什么时候变成这样?或者我该怎么做? (在 MsgBox 之前的类似“Wb.Activate”没有帮助)
这个问题出现在一个更复杂的现实世界中,而且似乎与安全问题有关。我试图用一个简单的例子来理解这种行为
【问题讨论】:
-
你试过
App.ActiveWorkbook.Name吗? -
您的代码还显示“ActiveWork”,而不是“ActiveWorkbook”
-
为什么不
MsgBox Wb.Name?