我有一些VBA代码在我工作的桌面上运行得很好,但是在家里它是崩溃的。事实证明我所要做的就是改变
Set shtObj = ThisWorkbook.Sheets(1)
到
Set shtObj = Excel.ThisWorkbook.Sheets(1)
任何人都知道为什么?我们的组织刚刚搬到了一个SharePoint平台,我怀疑它正在引发各种各样的伏都教,但我只是在猜测。
答案 0 :(得分:5)
如果您将返回更改为ThisWorkbook
,是否有效?
我怀疑它会,并且原因是因为VBA重新编译了自己(并且第一次没有正确编译 - 因此有崩溃的倾向)。
当文件中嵌入的版本详细信息与正在使用的Office / VBA版本不同,或者从32位更改为64位Office时,会发生重新编译。编辑该行足以重新编译该行,因此在Excel.
之前添加ThisWorkbook
足以使其重新编译。在Excel.
之前删除ThisWorkbook
会强制它再次重新编译。
唯一可能的另一件事是,如果有一个名为ThisWorkbook
的变量,但我希望你得到错误91,“对象变量或没有设置块变量”,或者其他一些错误,但不是崩溃。
答案 1 :(得分:2)
ThisWorkbook
是一个全局范围的Workbook
对象,您可以使用它来引用包含您正在查看的VBA代码的工作簿实例。
理论上 ,不合格的ThisWorkbook
与<{1}}或Excel.ThisWorkbook
完全相同。
证明:
Application.ThisWorkbook
输出相同指针地址的3倍。
Sub Test()
Debug.Print ObjPtr(ThisWorkbook), _
ObjPtr(Excel.ThisWorkbook), _
ObjPtr(Application.ThisWorkbook)
End Sub
是隐藏Excel.ThisWorkbook
模块的成员(Property Get
),而Excel._Global
是Application.ThisWorkbook
的成员(Property Get
) } class。
不确定您的文件是什么,但
答案 2 :(得分:0)
这似乎是我的特定用户/个人资料中的错误。其他人现在正在使用代码/工作簿,没有任何麻烦的报告。耶!!?