在ActiveX控件命令按钮的代码名称中发生了错误的更改。

18 浏览
0 Comments

在ActiveX控件命令按钮的代码名称中发生了错误的更改。

这不是一个重复的问题,因为尽管按照Excel在其他计算机上重命名ActiveX控件和其他地方的答案建议删除了*.exd文件,但这里描述的问题仍然存在。

我们网络中的一台机器(我们称之为“计算机2”)会在不知不觉中更改放置在Excel工作簿中的ActiveX命令按钮的代码名称。无论按钮的(名称)属性之前是什么,它都会将其返回到默认的CommandButton*方案(CommandButton1CommandButton2等)。

请看下面的截图。在计算机2上打开时,btn2的代码名称会更改为CommandButton1

为什么会这样?我该如何修复这个问题?

我甚至可以同时在两台机器上从相同的Book1.xlsm文件打开完全相同的工作簿(其中一个只读)。同时查看两个屏幕,按钮名称是不同的!是计算机2更改了它。

当然,这会破坏按钮的功能,因为它们不再触发其预期的事件代码。在下面的示例中,btn2之前调用工作表模块中的Private Sub btn2_Click()并执行该子程序中的代码。但是在计算机2上,按钮不再命名为btn2,因此它不会触发该事件;它什么也不做 - 或者更糟糕的是,如果之前存在一个名为CommandButton1的按钮,则会触发与之无关的事件。

在计算机1上打开的工作簿:

enter image description here

完全相同的工作簿,但这次在计算机2上:

enter image description here

现在,这在我之前就发生过。多年来,有一两次在几台不同的机器上,所有的命令按钮都被重命名为这样。但我从未能够复现这个问题,我认为是工作簿损坏,没什么大不了的。

但是在计算机2上,每次都会一致地发生这种情况。

非ActiveX的窗体控件按钮,例如上面示例中的“窗体按钮1”,不受此问题的影响。一个明显但繁琐的解决方法是摆脱所有的ActiveX按钮(如这个答案中建议的),并将它们转换为例如窗体控件按钮,但目标是避免这种彻底的解决方法。

0
0 Comments

在这段代码中,作者提到了一个问题:ActiveX控件命令按钮的代码名称发生了错误的更改。问题的原因是按钮名称的长度超过了限制。为了解决这个问题,作者提供了一个简单的解决方法:将按钮名称缩短。作者通过一个示例代码来演示这个问题,并提供了一个测试函数来验证解决方法的有效性。通过执行这个测试函数,我们可以看到在按钮名称长度超过31个字符时,代码执行会停止。还有自己尝试了其他解决方法但没有成功,并解释了为什么无法通过按钮的标题来确定应该为按钮命名的名称。这篇文章详细介绍了问题的原因和解决方法,帮助读者避免在使用ActiveX控件命令按钮时遇到类似的问题。

0
0 Comments

虽然我对VBA的了解很有限,但我对为什么会发生这种情况没有头绪,但我有一个修复它的想法...在`workbook_open`中,您可以运行代码将任何命令按钮重命名为所需的名称。这可能会很烦人,但至少在找出为什么会发生这种情况之前,这是一个临时的解决方法!

Sub Not_Workbook_Open()
  Dim btn As OLEObject, increment As Integer
  increment = 1
  For Each btn In Sheets("Sheet1").OLEObjects
      btn.Name = "btn" & increment
      increment = increment + 1
  Next
End Sub

0
0 Comments

问题的原因是在一台计算机上安装了混合了Office 2010和Office 2013产品。解决方法如下:

1. 下载以下补丁:

- Office 2010补丁:[http://support.microsoft.com/kb/2553154/EN-US](http://support.microsoft.com/kb/2553154/EN-US)

- Office 2013补丁:[http://support.microsoft.com/kb/2726958/EN-US](http://support.microsoft.com/kb/2726958/EN-US)

2. 关闭所有Office程序(包括Lync)。

3. 安装Office 2010补丁。

4. 安装Office 2013补丁。

5. 从您的个人资料和其他用户资料中删除*.exd文件。有关说明,请参见[此Stack Overflow回答](https://stackoverflow.com/a/27500258/119775)和[此Microsoft解决方案](http://support.microsoft.com/kb/3025036/EN-US)。

6. 重新启动计算机。

0