Excel 的 ActiveX 组合框中的错误?

Kim*_*son 5 excel vba excel-2007 excel-2003

我注意到在以下情况下我会遇到各种烦人的错误:

  • 我在工作表上有 ActiveX 组合框(不是 Excel 表单)
  • 组合框具有链接到它们的事件代码(例如,onchange 事件)
  • 我使用它们的 listfillrange 或 linkscell 属性(清除这些属性似乎可以缓解很多问题)
  • (不确定这是否已连接)但目标链接单元上有数据验证。

我编写了一个相当复杂的 excel 应用程序,它执行大量事件处理并使用大量控件。几个月来,我一直在努力处理与这些组合框有关的各种错误。我现在不记得每个实例的所有细节,但这些错误往往涉及将 listfillrange 和 linkscell 属性指向命名范围,并且通常与在不适当的时间触发的组合框事件有关(例如当 application.enableevents = 假)。这些问题在 Excel 2007 中似乎越来越大,因此我不得不完全放弃这些组合框(我现在使用包含在用户表单中的组合框,而不是直接在工作表上)。

有没有其他人看到过类似的问题?如果是这样,是否有优雅的解决方案?我环顾了谷歌,到目前为止还没有发现任何有类似问题的人。

我最终看到的一些症状是:

  • 启动时 Excel 崩溃(涉及组合框_onchange、listfillrange->另一个不同工作表上的命名范围以及 workbook_open 交互)。(注意,我还对链接的单元格进行了一些数据验证,以防用户直接编辑它们。)
  • Excel 呈现错误(通常当组合框更改时,另一个工作表中的某些单元格会随机绘制在当前工作表的顶部)有时它涉及屏幕完全闪烁到另一个工作表片刻。
  • Excel 失去理智(或者更确切地说,调用堆栈)(与第一个要点相关)。有时,当函数修改组合框的属性时,组合框 onchange 事件会触发,但它永远不会将控制权返回给首先导致更改的函数。即使在 application.enableevents = false 时,combobox_onchange 事件也会被触发。
  • 不应该触发的事件(我在与此相关的堆栈溢出上发布了另一个问题)。

在这一点上,我相当确信 ActiveX 组合框是邪恶的化身,不值得麻烦。我已经转而将这些组合框包含在用户表单模块中。我宁愿用弹出式表单给用户带来不便,也不愿出现随机的视觉伪影和崩溃(数据丢失)。

Dic*_*ika 3

我没有给您明确的答案,但我可以告诉您,大约 10 年前我就不再使用 ActiveX 控件的 ListFillRange 和 LinkedCell。我不记得我遇到过哪些具体问题。我只记得我得出的结论是,无论他们为我节省了多少时间,都不值得我费尽脑筋去追踪这些错误。所以现在我通过代码填充控件并处理事件中的输出。