我有一个Excel 2007 VBA项目,它可以在我的计算机和其他一些项目上正常工作,但在某些项目上它会在引用ActiveSheet对象的行上遇到错误32809。我发现在受影响的计算机上,无法识别ActiveSheet对象。 ActiveWorkbook对象工作正常。
在受影响的计算机上,如果我创建新工作簿,引用ActiveSheet并激活受影响的工作簿,则ActiveSheet对象可正常工作;我可以获得ActiveSheet的Name属性。
在我的电脑上,VBA编译得很好。但是在受影响的计算机上,编译会停止在" Option Explicit" line并返回错误:
"包含对无法找到的对象定义的引用。"但是“引用”对话框中的选定条目看起来很正常。
在受影响的计算机上,我们检查了更新但是它们是最新的;我假设IT远程处理更新。
我的想法是:
有什么想法吗?
更新:
示例代码,按要求:
Sub main()
Debug.Print ActiveSheet.Name
End Sub
更新#2:
认为这可能是工作簿损坏,我从头开始重建工作簿。但新工作簿也有同样的问题。
在发生错误的计算机上,我将文件的副本保存为xlsx,没有宏。然后我关闭并打开该文件以确保宏消失。然后我从原始文件中复制了所有VBA。然后我用macls重新保存为xlsm。
该文件在受影响的计算机上运行良好,并且在原始计算机上运行良好。
但是,在原始计算机上,如果我保存了文件,然后将其复制到受影响的计算机,则会回到原来的问题。
无论如何,这给了我一个笨拙的解决方法。接下来我将尝试KB文章3025036,"无法插入对象"安装MS14-082安全更新后出错。不一样的错误信息,但值得一试。
答案 0 :(得分:0)
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” ...非常简单!
问题已经解决!
谢谢...