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

时间:2015-02-28 00:22:16

标签: excel vba excel-vba excel-2007

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

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

在我的电脑上,VBA编译得很好。但是在受影响的计算机上,编译会停止在" Option Explicit" line并返回错误:

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

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

我的想法是:

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

有什么想法吗?

更新:

示例代码,按要求:

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

更新#2:

认为这可能是工作簿损坏,我从头开始重建工作簿。但新工作簿也有同样的问题。

在发生错误的计算机上,我将文件的副本保存为xlsx,没有宏。然后我关闭并打开该文件以确保宏消失。然后我从原始文件中复制了所有VBA。然后我用macls重新保存为xlsm。

该文件在受影响的计算机上运行良好,并且在原始计算机上运行良好。

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

无论如何,这给了我一个笨拙的解决方法。接下来我将尝试KB文章3025036,"无法插入对象"安装MS14-082安全更新后出错。不一样的错误信息,但值得一试。

3 个答案:

答案 0 :(得分:0)

你可以发布代码吗? 另外要检查的一件事是,您没有尝试将Excel.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

要检查损坏,请将所有内容复制/粘贴到新工作簿中,导出代码模块并将其重新导入新工作簿,然后进行编译。如果这样可以解决问题,那么可能就是腐败。

答案 1 :(得分:0)

此问题仅在删除所有列表框控件后消失。列表框控件已经存在很长时间了,并且在受影响的机器上工作正常;我不确定突然发生了什么变化,使它们无法在某些计算机上运行。

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

更新:

原来,问题是Office更新错误 - 从MS14-082安全更新更新KB2596927。当更新发布时,我们在11月份没遇到问题,但最近我们的企业IT部门尝试从所有计算机上删除KB2596927。但是,某些人的删除并不成功。 KB2596927仍然存在于我和其他一些地方,但是从一些人那里消失了。

我发现,如果在出现问题的计算机上,我删除了VBA并将其添加回来,它就可以在计算机和我们所有的计算机上运行。但是一旦我在我的计算机上修改了VBA并保存它并分发了工作簿,问题又回来了。

所以我删除了KB2596927 Office更新,这解决了问题。现在我可以在我的计算机上修改工作簿中的VBA,并分发工作簿,它适用于所有人。

答案 2 :(得分:0)

我有同样的问题。 VBA编译器在线显示问题:

ActiveSheet.Shapes("Key_1").Visible = False

并且它没有重新组织功能(以及形状)。

我很简单地解决了这个问题!

我从同一张纸(价格清单_2018)复制到“价格清单_2018(2)

然后我删除了“ price list_2018”表,然后

我将“ price list_2018(2)”重命名为“ price list_2018” ...非常简单!

问题已经解决!

谢谢...