ActiveX控件命令button代码名称的虚假更改

不重复,因为这里描述的问题发生,尽pipe已经删除了* .exd文件,如在其他计算机和其他地方的Excel重命名Activex控件的答案中所build议的那样。


我们networking上的一台特定的机器(我们称之为“计算机2”)虚假地并且默默地改变放置在Excel工作簿中的ActiveX命令button的代码名称。 无论button之前的(Name)属性如何,都会将其返回到默认的CommandButton*scheme。 ( CommandButton1CommandButton2等)

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

为什么? 我该如何解决?

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

当然,这会打破button的function,因为它们不再触发其预期的事件代码。 在下面的示例中, btn2用于从表单模块调用Private Sub btn2_Click()并执行该Sub中的代码。 但在计算机2上,该button不再被命名为btn2 ,因此不会触发该事件; 它什么都不做 – 或者更糟的是,如果碰巧有一个叫做CommandButton1的button,它会触发这个不相关的事件。

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

在这里输入图像说明

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

在这里输入图像说明

现在,这件事发生在我以前。 这些年来,一两次,在两台不同的机器上,我所有的命令button都被重命名。 但我从来没有能够重现这一点,我认为,损坏的工作簿,没有什么大不了的。

但是这一直发生在计算机2上,每一次。

非ActiveX,Form Controlbutton(如上例中的“Form Button 1”)不受此问题的影响。 一个明显而又乏味的解决方法是摆脱所有我的ActiveXbutton(如在这个答案中所build议的),并将它们转换成例如Form Controlbutton,但是其目的是避免这个核选项。

首先,我对VBA的知识非常有限。

第二:我不知道为什么发生这种情况,但我有一个想法如何解决它…在workbook_open你可以运行代码重命名任何CommandButtons到你想要的名字? 这当然会令人讨厌,但至less是一个临时的解决scheme,直到有人能够找出地球上的原因为止! 🙂

 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 

一位同事发现,如果在计算机上安装了Office 2010和Office 2013产品,则会发生这种情况。 解决这个问题的过程是:

  1. 下载这些补丁:

    • Office 2010补丁程序: http : //support.microsoft.com/kb/2553154/EN-US
    • Office 2013补丁: http : //support.microsoft.com/kb/2726958/EN-US
  2. closures所有Office程序(包括Lync,如果有的话)。

  3. 安装Office 2010修补程序。
  4. 安装Office 2013修补程序。
  5. 从您的configuration文件和所有其他用户configuration文件中删除* .exd文件。 有关说明,请参阅此堆栈溢出答案和此Microsoft解决scheme 。
  6. 重新启动您的机器。

由于没有推荐的解决scheme为我工作,我假设有些人仍然有这个问题,并对帮助我的修复感兴趣:

缩短button名称!

听起来很愚蠢,但我发现button名称的长度是有限制的。

通过制作一个带有一个ActiveX CommandButton的新工作表来试试这个。 然后添加此代码并通过按F5重复执行它:

 Public Sub test() For Each o In ActiveSheet.OLEObjects Debug.Print Len(o.Name); Tab(5); o.Name o.Name = o.Name & "X" Next End Sub 

你会注意到代码停止执行后

31 CommandButton1XXXXXXXXXXXXXXXXX

是的,我发现这个修复,因为我绝望的尝试seadoggie的解决scheme,失败,因为你不能读取button的标题,以确定button应该得到的名称。 🙂