Excel.ThisWorkbook与仅此工作簿之间的差异?

Excel.ThisWorkbook与仅此工作簿之间的差异?,excel,vba,object,qualifiers,Excel,Vba,Object,Qualifiers,我的办公桌上有一些VBA代码,在Excel中运行得很好,但在家里却很糟糕。结果我所要做的就是改变 Set shtObj = ThisWorkbook.Sheets(1) 到 有人知道为什么吗?我们的组织刚刚转移到SharePoint平台,我怀疑这会导致各种各样的巫毒蔓延,但我只是猜测。此工作簿是一个全局范围的工作簿对象,您可以使用它引用包含您正在查看的VBA代码的工作簿实例 因此,理论上,一个不合格的ThisWorkbook与Excel.ThisWorkbook或应用程序.ThisWorkbo

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

Set shtObj = ThisWorkbook.Sheets(1)


有人知道为什么吗?我们的组织刚刚转移到SharePoint平台,我怀疑这会导致各种各样的巫毒蔓延,但我只是猜测。

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

因此,理论上,一个不合格的
ThisWorkbook
Excel.ThisWorkbook
应用程序.ThisWorkbook
完全是同一个对象

证明:

Sub Test()
    Debug.Print ObjPtr(ThisWorkbook), _
                ObjPtr(Excel.ThisWorkbook), _
                ObjPtr(Application.ThisWorkbook)
End Sub
输出相同指针地址的3倍

Excel。此工作簿
是隐藏的
Excel.\u Global
模块和
应用程序的成员(
Property Get
)。此工作簿
Excel.Application
类的成员(
Property Get


不确定您的文件有什么问题,但两者之间不应该有任何区别。

如果您将其更改回
此工作簿
,是否有效?

我怀疑它会的,原因可能是VBA重新编译了自己(并且第一次没有正确编译-因此有崩溃的倾向)

当文件中嵌入的版本详细信息与正在使用的Office/VBA版本不同,或者从32位Office更改为64位Office时,会发生重新编译。编辑行足以重新编译行,因此在
此工作簿之前添加
Excel.
足以使其重新编译。在
此工作簿
之前删除
Excel.
将迫使它重新编译


唯一的另一件事可能是,如果有一个名为
ThisWorkbook
的变量,但我希望您得到错误91,“对象变量或块变量未设置”,或其他一些错误,但不是崩溃。

这似乎是我的特定用户/配置文件中的一个错误。其他人现在正在使用代码/工作簿,没有出现问题的报告。耶

迁移到SharePoint是否也伴随着迁移到Office 365?您是如何确定
此工作簿
可以修复它的?谢谢大家-是的,迁移到SharePoint(实际上是OneDrive)是在迁移到Office 365时完成的。从那以后,我尝试了一个版本的电子表格,它只是在我们的网络驱动器(不是SharePoint)上,并与SharePoint上的电子表格进行了比较。SharePoint代码给出了错误(删除“Excel.”时),但网络驱动器中的文件没有给出错误。这可能与位置无关,但SharePoint似乎是罪魁祸首。最佳猜测和放弃:这似乎与我的用户/个人资料有关。大楼里的其他人正在使用这个文件,没有问题。谢谢你。我试图删除Excel。再次出现同样的错误(“自动化错误-灾难性故障”-2147418113,fwiw)。我现在在工作中也遇到了这个问题,所以位置似乎没有进入其中。更新:我刚刚发现,当我将包含代码的工作簿移动到本地网络驱动器(而不是SharePoint)时,问题完全消失了,所以罪魁祸首似乎以某种方式是SharePoint。非常感谢。我尝试了您的测试(在中断模式下发生错误后的即时窗口中)。“ThisWorkbook”生成与以前相同的错误(自动化错误-灾难性故障”-2147418113,fwiw)。其他两个-以“Excel”或“Application”开头。工作正常。
Sub Test()
    Debug.Print ObjPtr(ThisWorkbook), _
                ObjPtr(Excel.ThisWorkbook), _
                ObjPtr(Application.ThisWorkbook)
End Sub