excel - 如果在事件期间将鼠标光标移到列表框之外,则 Excel 在 ListBox_DblClick 之后冻结
问题描述
语境
我正在使用Listbox_DblClick
Excel 用户表单(在 .xlam 插件中)上的事件来做很多事情(主要更新用户表单,但也做了一些外部日志记录......)。这些操作最多可能需要几秒钟。
问题
如果用户在 ListBox_DblClick 事件期间将鼠标光标移到列表框之外,则 Excel winbdows 几乎会被冻结。
结果
我无法单击 UserForm 或 ActiveSheet 或 VBA 窗口上的任何位置。甚至 Excel 的关闭按钮也没有反应。但似乎什么都没有运行(事件的最后一行已经运行,CPU 上没有任何可见的东西......)
为了能够再次与 Excel 交互,我需要:
- 将鼠标光标暂时移回 ListBox
- 或临时更改当前的 Windows 应用程序(例如通过两次 Alt+Tab)。
然后 Excel 在全球范围内都很好。没有任何其他后果,并且在此冻结后一切运行正常。
我已经检查过的
它与
EnableEvents
或ScreenUpdating
问题无关。这些由宏正确管理。即使在事件结束时添加两行将它们设置为 True 也不能解决问题。并不是宏还在运行。在事件结束时添加
Debug.Print "Finished"
显示“已完成”打印正常,而 Excel 保持冻结状态。ListBox.Locked
由于我不希望用户在当前事件仍在运行时启动新事件,因此我通过在事件的开始/结束时锁定/解锁许多 ListBox(包括与事件相关的一个)来防止这种情况。但是评论这些行并不能解决问题。
最小可复制示例
- 在用户窗体上添加一个数组
- 添加以下代码
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
For n = 1 To 3000
Me.Caption = n
Next n
Me.ListBox1.List = Array("Apple")
End Sub
Private Sub UserForm_Initialize()
Me.ListBox1.List = Array("Apple", "Banana")
End Sub
- 双击“香蕉”并移动鼠标光标
笔记
在此帖子表单 2012中(在 Dblclick 事件中编辑列表框项目会冻结 Excel,除非鼠标移到列表框上),用户似乎遇到了类似的问题。
解决方案
推荐阅读
- html - Outlook 中的 HTML 表单导致安全违规
- javascript - 如何将文本拆分为单词,同时仅捕获句号和句号之后的空格?
- node.js - SyntaxError, const 数组函数
- c++ - 彩票匹配号码系统,但垃圾邮件你输了
- python - 是否可以对非对称成本矩阵进行聚类
- jquery - 使用 JQuery 在每个 Input Type="number" 中设置不同的计算
- ios - 无权从照片库中挑选照片
- javascript - 立即抓取mySql中自动生成的字段以供使用
- r - tbl_summary 和数值变量
- assembly - 返回到 Eip 寄存器中存储的指令之后的下一条指令