VBA 由于 ActiveX 元素,代码无法执行(错误 32809)
VBA Code won't execute because of ActiveX Elements (Error 32809)
我有一个文件,其中包含链接到 VBA 代码的 ActiveX 元素。直到大约 1.5 个月前,该文件都运行良好。现在我怀疑它停止工作是因为 here and here.
描述的 MS 更新出现问题
到目前为止一切顺利。
它运行所在的计算机安装了 Office 2010。我尽职地检查了是否安装了更新。不是。
事实上,文章描述了如果安装了更新,ActiveX 控件将停止工作。经过进一步测试,我意识到一些控件继续工作!所以我认为不能再这样了...
...然而...这似乎确实是问题所在。
我创建并测试了两个文件:一个带有 ActiveX 控件 和一个带有表单控件。相同的控件,相同的代码。非常简单的代码。这是:
Sub Schaltfläche2_Klicken()
With ActiveSheet
.Range("a10000").End(xlUp).Offset(1, 0).Select
Selection = 1000
End With
End Sub
两个版本 运行 在我自己的电脑上都很好,我自己的电脑安装了 Excel 2013,安装了 MS 更新,并应用了文章中引用的修复程序! 然而在 2010 版本中,它只需要 运行 在表单控件上 运行 就应该如此!
ActiveX 版本创建了 VBA 错误 32809!它在 .Range
行出错。
我进一步测试...尝试使用 .cells(1,1)
引用单元格,但再次产生相同的错误! Dito 直接 selection of .Range("A1")
.
最后,我试着录制了一个宏。那行得通,它生成的代码像这样引用单元格,这是正常的:
ActiveCell.FormulaR1C1 = "10000"
我检查了宏安全设置。一切都被激活。没有像 "Lotus Compatibility" selected 这样的特殊设置。 "Z1S1" 引用样式也未激活。在我看来,这些都不应该影响 VBA 代码,但这是我唯一能想到的。
最后,我 无法再用鼠标 select ActiveX 元素。 当它们继续工作时,我无法 select 它们或对点击它们以便出现编辑它们的菜单!
所以你是...有谁知道为什么会这样?还有其他人有这个吗?还有什么我可以看的吗?我一直在搜索内胎,但没有找到。
提前致谢!
大胆猜测:也许 FM20.DLL 库有问题。
您可以查看
Sub M_snb()
c00 = Replace(Mid(Environ(6), 9), "\cmd.exe", "\FM20.DLL")
MsgBox CreateObject("wscript.shell").exec("cmd /c Dir """ & c00 & """").stdout.readall
End Sub
好的。这是我自己的问题的非解决方案。
Microsoft 告诉您该问题的解决方案是在所有其他计算机上也安装他们发布的错误更新,然后手动修复每一台计算机。当然,我没有管理员权限来执行此操作,也没有时间执行它。
遗憾的是,这让我只有一个解决问题的方法。 取出所有的ActiveX Controlls并用Form Controlls替换它们。
完成此操作后,我的电子表格、所有代码和表单控件在任何 excel 版本中都能完美运行。
我真的希望微软能提出更好的解决方案,因为目前的解决方案对绝大多数人来说都行不通。
我有一个文件,其中包含链接到 VBA 代码的 ActiveX 元素。直到大约 1.5 个月前,该文件都运行良好。现在我怀疑它停止工作是因为 here and here.
描述的 MS 更新出现问题到目前为止一切顺利。
它运行所在的计算机安装了 Office 2010。我尽职地检查了是否安装了更新。不是。
事实上,文章描述了如果安装了更新,ActiveX 控件将停止工作。经过进一步测试,我意识到一些控件继续工作!所以我认为不能再这样了...
...然而...这似乎确实是问题所在。
我创建并测试了两个文件:一个带有 ActiveX 控件 和一个带有表单控件。相同的控件,相同的代码。非常简单的代码。这是:
Sub Schaltfläche2_Klicken()
With ActiveSheet
.Range("a10000").End(xlUp).Offset(1, 0).Select
Selection = 1000
End With
End Sub
两个版本 运行 在我自己的电脑上都很好,我自己的电脑安装了 Excel 2013,安装了 MS 更新,并应用了文章中引用的修复程序! 然而在 2010 版本中,它只需要 运行 在表单控件上 运行 就应该如此!
ActiveX 版本创建了 VBA 错误 32809!它在 .Range
行出错。
我进一步测试...尝试使用 .cells(1,1)
引用单元格,但再次产生相同的错误! Dito 直接 selection of .Range("A1")
.
最后,我试着录制了一个宏。那行得通,它生成的代码像这样引用单元格,这是正常的:
ActiveCell.FormulaR1C1 = "10000"
我检查了宏安全设置。一切都被激活。没有像 "Lotus Compatibility" selected 这样的特殊设置。 "Z1S1" 引用样式也未激活。在我看来,这些都不应该影响 VBA 代码,但这是我唯一能想到的。
最后,我 无法再用鼠标 select ActiveX 元素。 当它们继续工作时,我无法 select 它们或对点击它们以便出现编辑它们的菜单!
所以你是...有谁知道为什么会这样?还有其他人有这个吗?还有什么我可以看的吗?我一直在搜索内胎,但没有找到。
提前致谢!
大胆猜测:也许 FM20.DLL 库有问题。 您可以查看
Sub M_snb()
c00 = Replace(Mid(Environ(6), 9), "\cmd.exe", "\FM20.DLL")
MsgBox CreateObject("wscript.shell").exec("cmd /c Dir """ & c00 & """").stdout.readall
End Sub
好的。这是我自己的问题的非解决方案。
Microsoft 告诉您该问题的解决方案是在所有其他计算机上也安装他们发布的错误更新,然后手动修复每一台计算机。当然,我没有管理员权限来执行此操作,也没有时间执行它。
遗憾的是,这让我只有一个解决问题的方法。 取出所有的ActiveX Controlls并用Form Controlls替换它们。
完成此操作后,我的电子表格、所有代码和表单控件在任何 excel 版本中都能完美运行。
我真的希望微软能提出更好的解决方案,因为目前的解决方案对绝大多数人来说都行不通。