某些计算机无法识别 ActiveSheet 对象
ActiveSheet object not recognized on some computers
我有一个 Excel 2007 VBA 项目,它在我的计算机和其他一些计算机上运行良好,但在某些计算机上它在引用 ActiveSheet 对象的行上遇到错误 32809。我发现在受影响的计算机上,无法识别 ActiveSheet 对象。 ActiveWorkbook 对象工作正常。
在受影响的计算机上,如果我创建一个新的工作簿,引用 ActiveSheet,并激活受影响的工作簿,ActiveSheet 对象工作正常;我可以获得 ActiveSheet 的名称 属性。
在我的电脑上 VBA 可以正常编译。但在受影响的计算机上,编译在 "Option Explicit" 行停止并且 returns 错误:
"Contains references to object definitions that could not be found."但是“引用”对话框中的选定条目看起来很正常。
在受影响的计算机上,我们检查了更新,但它们是最新的;我假设 IT 远程处理更新。
我的想法是:
- 奇怪的行为表明工作簿已损坏,但它在某些计算机上运行良好的事实表明并非如此。所有计算机都在 Excel 2007 SP3。
- 另一方面,它在某些计算机上运行良好但在其他计算机上运行良好这一事实表明 Excel 在受影响的计算机上存在问题。
有什么想法吗?
更新:
示例代码,根据要求:
Sub main()
Debug.Print ActiveSheet.Name
End Sub
更新#2:
考虑到可能是工作簿损坏,我从头开始重建了工作簿。但是新的工作簿也有同样的问题。
在发生错误的计算机上,我将文件的副本保存为 xlsx,没有宏。然后我关闭并打开该文件以确保宏已经消失。然后我从原始文件中复制了所有 VBA 。然后我用宏重新保存为 xlsm。
该文件在受影响的计算机上运行良好,在原始计算机上也运行良好。
但是,在原来的电脑上,如果我保存了文件,然后将其复制到受影响的电脑上,又回到了原来的问题。
所以无论如何这给了我一个笨拙的解决方法。接下来我将尝试知识库文章 3025036,安装 MS14-082 安全更新后出现 "Cannot insert object" 错误。不同的错误消息,但值得一试。
你能post 代码吗?
另外要检查的一件事是,您没有在未验证其类型的情况下尝试将 Excel.ActiveSheet 对象放入工作表对象中。 Activesheet 也可以是图表对象(即图表 Sheet)。
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
为了防止损坏,copy/paste 将所有内容都放入一个新工作簿中,导出您的代码模块并将它们重新导入到新工作簿中,然后进行编译。如果这解决了它,那么它可能是腐败。
此问题仅在删除所有列表框控件后才消失。列表框控件已经存在了很长时间,并且在受影响的机器上运行良好;我不确定是什么突然改变使它们无法在某些计算机上工作。
作为解决方法,我将在运行时尝试 deleting/creating 列表框,而不是使用相同的列表框控件。这样,它始终是在那台计算机上创建的新列表框。
更新:
事实证明问题出在错误的 Office 更新上 -- 从 MS14-082 安全更新更新 KB2596927。 11 月份更新发布时我们没有遇到任何问题,但最近我们的公司 IT 尝试从所有计算机中删除 KB2596927。但是,删除在某些上并不成功。 KB2596927 在我的和其他一些上仍然存在,但从一些上消失了。
我发现,如果在出现问题的计算机上,我删除了 VBA 并将其添加回去,它就可以在该计算机和我们所有的计算机上运行。但是我一在电脑上修改了VBA并保存,发了练习册,问题又来了
所以我删除了 KB2596927 Office 更新,并解决了这个问题。现在我可以在我的电脑上修改工作簿中的VBA,并分发工作簿,并且可以正常工作。
我有同样的问题。 VBA 编译器在行中显示问题:
ActiveSheet.Shapes("Key_1").Visible = False
并且它没有重新组织功能(还有形状)。
我很简单的解决了这个问题!
我复制了相同的 sheet(价格 list_2018)到“价格 list_2018 (2)
然后我删除了 sheet "price list_2018" 然后
我将 "price list_2018 (2)" 重命名为 "price list_2018" ...非常简单!
问题已解决!
谢谢...
我有一个 Excel 2007 VBA 项目,它在我的计算机和其他一些计算机上运行良好,但在某些计算机上它在引用 ActiveSheet 对象的行上遇到错误 32809。我发现在受影响的计算机上,无法识别 ActiveSheet 对象。 ActiveWorkbook 对象工作正常。
在受影响的计算机上,如果我创建一个新的工作簿,引用 ActiveSheet,并激活受影响的工作簿,ActiveSheet 对象工作正常;我可以获得 ActiveSheet 的名称 属性。
在我的电脑上 VBA 可以正常编译。但在受影响的计算机上,编译在 "Option Explicit" 行停止并且 returns 错误:
"Contains references to object definitions that could not be found."但是“引用”对话框中的选定条目看起来很正常。
在受影响的计算机上,我们检查了更新,但它们是最新的;我假设 IT 远程处理更新。
我的想法是:
- 奇怪的行为表明工作簿已损坏,但它在某些计算机上运行良好的事实表明并非如此。所有计算机都在 Excel 2007 SP3。
- 另一方面,它在某些计算机上运行良好但在其他计算机上运行良好这一事实表明 Excel 在受影响的计算机上存在问题。
有什么想法吗?
更新:
示例代码,根据要求:
Sub main()
Debug.Print ActiveSheet.Name
End Sub
更新#2:
考虑到可能是工作簿损坏,我从头开始重建了工作簿。但是新的工作簿也有同样的问题。
在发生错误的计算机上,我将文件的副本保存为 xlsx,没有宏。然后我关闭并打开该文件以确保宏已经消失。然后我从原始文件中复制了所有 VBA 。然后我用宏重新保存为 xlsm。
该文件在受影响的计算机上运行良好,在原始计算机上也运行良好。
但是,在原来的电脑上,如果我保存了文件,然后将其复制到受影响的电脑上,又回到了原来的问题。
所以无论如何这给了我一个笨拙的解决方法。接下来我将尝试知识库文章 3025036,安装 MS14-082 安全更新后出现 "Cannot insert object" 错误。不同的错误消息,但值得一试。
你能post 代码吗? 另外要检查的一件事是,您没有在未验证其类型的情况下尝试将 Excel.ActiveSheet 对象放入工作表对象中。 Activesheet 也可以是图表对象(即图表 Sheet)。
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
为了防止损坏,copy/paste 将所有内容都放入一个新工作簿中,导出您的代码模块并将它们重新导入到新工作簿中,然后进行编译。如果这解决了它,那么它可能是腐败。
此问题仅在删除所有列表框控件后才消失。列表框控件已经存在了很长时间,并且在受影响的机器上运行良好;我不确定是什么突然改变使它们无法在某些计算机上工作。
作为解决方法,我将在运行时尝试 deleting/creating 列表框,而不是使用相同的列表框控件。这样,它始终是在那台计算机上创建的新列表框。
更新:
事实证明问题出在错误的 Office 更新上 -- 从 MS14-082 安全更新更新 KB2596927。 11 月份更新发布时我们没有遇到任何问题,但最近我们的公司 IT 尝试从所有计算机中删除 KB2596927。但是,删除在某些上并不成功。 KB2596927 在我的和其他一些上仍然存在,但从一些上消失了。
我发现,如果在出现问题的计算机上,我删除了 VBA 并将其添加回去,它就可以在该计算机和我们所有的计算机上运行。但是我一在电脑上修改了VBA并保存,发了练习册,问题又来了
所以我删除了 KB2596927 Office 更新,并解决了这个问题。现在我可以在我的电脑上修改工作簿中的VBA,并分发工作簿,并且可以正常工作。
我有同样的问题。 VBA 编译器在行中显示问题:
ActiveSheet.Shapes("Key_1").Visible = False
并且它没有重新组织功能(还有形状)。
我很简单的解决了这个问题!
我复制了相同的 sheet(价格 list_2018)到“价格 list_2018 (2)
然后我删除了 sheet "price list_2018" 然后
我将 "price list_2018 (2)" 重命名为 "price list_2018" ...非常简单!
问题已解决!
谢谢...