重命名现有工作表中的ActiveX组合框



我有一个问题,找不到代码片段。

当使用VBA重命名现有工作表ActiveX组合框时,为什么需要重新打开工作簿以使其名称属性完全刷新/同步?

有变通办法吗?

下面外部链接上的一条评论指出了类似的问题:https://www.mrexcel.com/board/threads/vba-how-to-change-the-name-of-an-existing-combobox.1082608/

在这个用例中,我循环遍历OLEObjects集合,并将特定的OLEObject过滤到标准集合中。当我更改name属性时,我引用的是标准集合项。

在工作簿关闭并重新打开之前,名称更改会反映在工作表上,但不会反映在OLEObjects的后端属性中。

好吧,在这个例子中,我的代码缺少一些东西。我很困惑是什么是通过Excel本身自动发生的,而不是通过编程方式发生的。

更新:问题的另一个主要原因,我通过密集的调试发现了!!!如果您重命名任何ActiveX组合框以包含"符号时,这些框在尝试与任何VBA事件代码通信时都会遇到问题,即使稍后再次重命名这些框以不包含这样的符号。关闭并重新打开工作簿会刷新此时组合框中的错误。

如果您尝试添加"符号转换为常规事件过程名称,则会收到一个错误。我假设这个错误是由于将框重命名为包含该符号而无意中触发的。警告:这可能适用于其他符号,但尚未经过测试。在这种情况下,我的处境非常独特。

另一个需要强调的重要点是:如果您的代码涉及重命名ActiveX组合框,并且任何两个或多个框在整个代码的某个时刻共享相同的名称,那么在工作簿关闭/重新打开之前,在工作表模块中侦听的任何事件代码都会出现错误。即使在过程结束时没有两个框共享相同的属性名称,也会出现此错误。