Excel.ThisWorkbook和ThisWorkbook之间的区别?

我有一些VBA代码,在我办公桌上的Excel中运行良好,但在家里却是崩溃的。 结果我所要做的就是改变

Set shtObj = ThisWorkbook.Sheets(1) 

 Set shtObj = Excel.ThisWorkbook.Sheets(1) 

任何人知道为什么 我们的组织刚刚搬到了一个SharePoint平台,我怀疑这个平台正在造成所有巫术的蔓延,但我只是猜测。

如果您将其更改 ThisWorkbook是否有效?

我怀疑它会的,原因将是因为VBA重新编译自己(并没有第一次正确编译 – 因此崩溃的倾向)。

当embedded在文件中的版本信息与正在使用的Office / VBA版本不同,或者从32位到64位Office有所不同时,就会发生重新编译。 编辑行就足以重新编译行,所以添加Excel. 之前ThisWorkbook足以使其重新编译。 删除Excel.ThisWorkbook应该强制它重新编译之前。

唯一可能的是,如果有一个名为ThisWorkbook的variables,但是我希望你得到错误91,“对象variables或块variables未设置”,或者其他错误,但不是崩溃。

ThisWorkbook是一个全局范围的Workbook对象,您可以使用它来引用包含您正在查看的VBA代码的工作簿实例。

所以理论上讲 ,一个不合格的ThisWorkbookExcel.ThisWorkbookApplication.ThisWorkbook 完全一样。

certificate:

 Sub Test() Debug.Print ObjPtr(ThisWorkbook), _ ObjPtr(Excel.ThisWorkbook), _ ObjPtr(Application.ThisWorkbook) End Sub 

输出相同指针地址的3倍。

Excel.ThisWorkbook是隐藏的Excel._Global模块的成员( Property Get ),而Application.ThisWorkbookExcel.Application类的成员( Property Get )。

不知道你的文件是怎么回事,但两者之间没有任何区别。

这似乎是我的特定用户/configuration文件中的一个错误。 其他人正在使用代码/工作簿,没有麻烦的报告。 好极了!!?