在for循环中显示模态用户窗体



我在显示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

编辑根据评论,如果我现在找到你,你想同时做两件事:

  1. 保持userform无模式状态
  2. 停止循环执行,直到用户窗体有任何操作为止

我能想到的唯一解决方法是以下代码(请参阅内部的一些注释):

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

最新更新