Excel.ThisWorkbook和ThisWorkbook之间的区别?

时间:2017-01-25 21:31:37

标签: excel vba object qualifiers

我有一些VBA代码在我工作的桌面上运行得很好,但是在家里它是崩溃的。事实证明我所要做的就是改变

Set shtObj = ThisWorkbook.Sheets(1)

Set shtObj = Excel.ThisWorkbook.Sheets(1)

任何人都知道为什么?我们的组织刚刚搬到了一个SharePoint平台,我怀疑它正在引发各种各样的伏都教,但我只是在猜测。

3 个答案:

答案 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._GlobalApplication.ThisWorkbook的成员(Property Get) } class。

不确定您的文件是什么,但

答案 2 :(得分:0)

这似乎是我的特定用户/个人资料中的错误。其他人现在正在使用代码/工作簿,没有任何麻烦的报告。耶!!?