我在显示ShowModal已停用的Userform时遇到问题(以便能够在用户表单运行时使用电子表格)。我以前使用过这个方法,但我认为在这里它不起作用,因为userform在for循环中。。。
我到处都找过,也试过:
Userform1.Show vbModeless
Userform1.Show 0
Show Modal = False
...
问题是我的userform在for循环中,所以对于不同的值,如果它们是我想要的,我打开userform。代码类似于:
for
if... then
userform.show 0
end if
next
当我这样做的时候,它只完成for循环中的所有操作,然后在最后打开userform(在无模式模式下,但为时已晚)。如果我在正常模式下做,userform.show,它工作得很好(我只是不能使用电子表格)
有人知道为什么它不起作用吗?如果你想检查整个代码,请告诉我,我没有发布它,因为它有点长。。
提前感谢!
如果你想在循环(和代码)仍在运行时对你的用户表单"做任何事情",你需要以这种方式添加DoEvents function
:
(这是我的测试潜艇)
Sub test_UF()
Dim i
For i = 1 To 3000
'UserForm is show when i=100
If i = 100 Then
'show it in ModeLess state to keep loop running
UserForm1.Show vbModeless
End If
'this is important!!
DoEvents
'only for test
Debug.Print i
Next
End Sub
编辑根据评论,如果我现在找到你,你想同时做两件事:
- 保持userform无模式状态
- 停止循环执行,直到用户窗体有任何操作为止
我能想到的唯一解决方法是以下代码(请参阅内部的一些注释):
Sub qTest()
Dim i
For i = 1 To 1000
'this time we show user form twice
If i > 100 And i < 103 Then
UserForm1.Show vbModeless
End If
'to keep the loop waiting until you don't hide your UserForm
'by pressing any button on UserForm
Do While UserForm1.Visible
DoEvents
Loop
Debug.Print i
Next
End Sub