某些计算机上无法识别ActiveSheet对象

我有一个Excel 2007 VBA项目,在我的电脑和其他一些工作正常,但在一些它引用错误32809引用ActiveSheet对象的行。 我发现在受影响的计算机上,无法识别ActiveSheet对象。 ActiveWorkbook对象正常工作。

在受影响的计算机上,如果我创build一个新的工作簿,引用ActiveSheet,并激活受影响的工作簿,则ActiveSheet对象正常工作; 我可以得到ActiveSheet的Name属性。

在我的电脑上,VBA编译得很好。 但是,在受影响的计算机上,编译停止在“选项显式”行并返回错误:

“包含对无法find的对象定义的引用”。 但是“参考”对话框中的选定条目看起来很正常。

在受影响的计算机上,我们检查了更新,但是它们是最新的; 我假设IT处理远程更新。

我的想法是:

  • 奇怪的行为表明工作簿腐败,但事实上,它在一些计算机上正常工作表明不是。 所有的电脑都在Excel 2007 SP3上。
  • 另一方面,在某些计算机上运行良好,而在其他计算机上运行却不正常,这表明Excel在受影响的计算机上存在问题。

有任何想法吗?

更新:

示例代码,请求:

Sub main() Debug.Print ActiveSheet.Name End Sub 

更新#2:

认为这可能是工作簿腐败,我从头开始重build工作簿。 但新的工作手册有同样的问题。

在发生错误的计算机上,我将该文件的副本保存为xlsx,而不是macros。 然后我closures并打开该文件,以确保macros不在。 然后我从原始文件中复制所有的VBA。 然后,我使用macros重新保存为xlsm。

该文件在受影响的计算机上工作正常,并且在原始计算机上也工作得很好。

但是,在原来的计算机上,如果我保存了该文件,然后将其复制到受影响的计算机上,则返回到原来的问题。

所以,无论如何,这给了我一个笨拙的解决方法。 接下来,我将在安装MS14-082安全更新后,尝试知识库文章3025036“无法插入对象”错误。 不是一样的错误消息,但值得一试。

你可以发布代码吗? 还有一件事要检查的是,你不是试图将Excel.ActiveSheet对象放入工作表对象而不validation它的types。 Activesheet也可以是图表对象(即图表)。

 Sub Example() Dim ws As Excel.Worksheet 'Risks Error: Set ws = Excel.ActiveSheet 'Safer: If TypeOf Excel.ActiveSheet Is Excel.Worksheet Then Set ws = Excel.ActiveSheet Else 'Do something else:) End If End Sub 

要检查反腐败,复制/粘贴到一个新的工作簿,导出您的代码模块,并重新导入到新的工作簿,然后编译。 如果解决了这个问题,那么很可能是腐败。

只有在删除所有列表框控件后,此问题才消失。 列表框控件已经很长时间了,并且在受影响的机器上工作正常。 我不确定突然改变了什么,使他们不能在某些电脑上工作。

作为一种解决方法,我将尝试在运行时删除/创build列表框,而不是使用相同的列表框控件。 这样,它总是在该计算机上创build一个新的列表框。

更新:

事实certificate,问题是Office更新不正确 – 从MS14-082安全更新更新KB2596927。 当11月份的更新发布时,我们还没有遇到任何问题,但是最近我们的企业IT部门试图从所有计算机上删除KB2596927。 但是,一些拆除并不成功。 KB2596927还在我的身上,还有一些,但从一些。

我发现,如果在发生问题的计算机上,我删除了VBA,并将其添加回来,它在该计算机和我们所有的计算机上工作。 但是,当我在计算机上修改了VBA并将其保存并分发了工作簿后,问题又回来了。

所以我删除了KB2596927 Office更新,并解决了这个问题。 现在,我可以在我的电脑上修改工作簿中的VBA,并分发工作簿,并且它对所有人都正常工作。