0

我在显示禁用 ShowModal 的用户表单时遇到问题(以便在用户表单运行时能够使用电子表格)。我以前使用过这种方法,但我认为在这里它不起作用,因为用户窗体在 for 循环中......

我到处看了,我试过:

Userform1.Show vbModeless   
Userform1.Show 0    
Show Modal = False
...

问题是我的用户表单在 for 循环内所以对于不同的值,如果它们是我想要的,我打开用户表单。代码类似于:

 for 
     if...  then
        userform.show 0
      end if
 next

当我这样做时,它只是执行 for 循环中的所有操作,然后在最后打开用户窗体(在无模式模式下,但为时已晚..)。如果我在正常模式下执行,userform.show,它会完美运行(我只是无法使用电子表格)

有谁知道为什么它不工作?如果您想检查整个代码,请告诉我,我没有发布它,因为它有点长..

提前致谢!

4

1 回答 1

0

如果您想在循环(和代码)仍在运行时对用户表单“做任何事情”,则需要以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. 保持用户窗体无模式状态和
  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
于 2013-08-14T06:36:52.690 回答