当宏为 运行 时允许 "Mouse Click" 事件或 "switch Excel tab"
Allow "Mouse Click" event or "switch Excel tab" when a macro is running
我有一个从 Microfocus RUMBA Mainframe Display 中提取数据并逐行放入 Excel 行的宏。我创建了一个 Global Mainframe 对象,用于提取到 Excel。但是当进程为 运行 并且如果用户决定停止处理时,他不能单击 Excel 上的停止按钮或转到不同的选项卡以查看正在粘贴的数据。在切换或停止选项卡之前,他必须点击 6 次。
我看到 DoEvents 允许循环中的鼠标单击事件做事,但是代码的编写方式是循环中有很多行,而函数没有循环,并且将 DoEvents 放在每一行之后似乎不合理。我觉得这样做更好,但不确定那是什么。有人可以帮忙吗?
VBA 是单线程的。所以你不能让一个 VBA 动作打断另一个动作。例如,如果您有一个取消按钮,并且允许用户通过 DoEvents
处理单击它,则在当前 运行ning 程序之后,取消操作仍将 运行。
在 Excel 中,这种单线程性质最终成为一件好事,因为您通常不希望用户在进行编程更改时与工作簿交互。如果允许这样做,您将得到未定义的行为。
您最好的做法是制作一个使用 Excel Interop extensions 将数据从大型机移动到 Excel 的 .NET 应用程序。如果您使用 VB.NET,那么您会发现代码与 VBA 非常相似。事实上,Excel.Application
对象模型是相同的,因此您已经拥有干净的端口的宏代码。
这里有一个add-in可以帮助RUMBA发展的:
https://www.microfocus.com/documentation/rumba/desktop951/RumbaSystemAdminGuide/GUID-DDB7571D-6167-4F8B-876E-E7450F3030B2.html
我有一个从 Microfocus RUMBA Mainframe Display 中提取数据并逐行放入 Excel 行的宏。我创建了一个 Global Mainframe 对象,用于提取到 Excel。但是当进程为 运行 并且如果用户决定停止处理时,他不能单击 Excel 上的停止按钮或转到不同的选项卡以查看正在粘贴的数据。在切换或停止选项卡之前,他必须点击 6 次。
我看到 DoEvents 允许循环中的鼠标单击事件做事,但是代码的编写方式是循环中有很多行,而函数没有循环,并且将 DoEvents 放在每一行之后似乎不合理。我觉得这样做更好,但不确定那是什么。有人可以帮忙吗?
VBA 是单线程的。所以你不能让一个 VBA 动作打断另一个动作。例如,如果您有一个取消按钮,并且允许用户通过 DoEvents
处理单击它,则在当前 运行ning 程序之后,取消操作仍将 运行。
在 Excel 中,这种单线程性质最终成为一件好事,因为您通常不希望用户在进行编程更改时与工作簿交互。如果允许这样做,您将得到未定义的行为。
您最好的做法是制作一个使用 Excel Interop extensions 将数据从大型机移动到 Excel 的 .NET 应用程序。如果您使用 VB.NET,那么您会发现代码与 VBA 非常相似。事实上,Excel.Application
对象模型是相同的,因此您已经拥有干净的端口的宏代码。
这里有一个add-in可以帮助RUMBA发展的: https://www.microfocus.com/documentation/rumba/desktop951/RumbaSystemAdminGuide/GUID-DDB7571D-6167-4F8B-876E-E7450F3030B2.html