Excel VBA用户窗体加载栏在窗口关闭之前不会运行

Excel VBA用户窗体加载栏在窗口关闭之前不会运行,excel,vba,userform,Excel,Vba,Userform,我似乎不明白为什么这行不通。我希望在userform中为每个A添加标签以增加宽度 但是当我运行它的时候,子系统的其余部分在窗体关闭之前不会运行。我怎样才能阻止这一切 Sub movepost() Dim a As Range Dim rcount As Long Dim load As Variant Dim load1 As Variant Dim width As Variant width = fmLoadingBar.Labe

我似乎不明白为什么这行不通。我希望在userform中为每个A添加标签以增加宽度

但是当我运行它的时候,子系统的其余部分在窗体关闭之前不会运行。我怎样才能阻止这一切

    Sub movepost()

    Dim a As Range
    Dim rcount As Long
    Dim load As Variant

    Dim load1 As Variant
    Dim width As Variant

    width = fmLoadingBar.Label1.width

        For Each a In Range("a2:A9999")
            If a.Value = "" Then
            rcount = a.Row
            End If

        Next a

    DoEvents
    fmLoadingBar.Show


    rcount = (rcount - 1) * 12
    load = width / rcount
    fmLoadingBar.Label1.width = 0


        For Each a In Range("A2:l9999")

                If a.Column = 1 Then

                ElseIf a.Column = 6 Then
                ElseIf a.Column = 7 Then

                ElseIf a.Column = 11 Then

                ElseIf a.Value = "" Then

                    a.Value = a.Offset(0, -1).Value
                ElseIf a.Value = "" And a.Offset(1, 0).Value = "" And a.Offset(1, 0).Value = "" And a.Offset(1, 0).Value = "" Then

                    Exit For


                End If

            load1 = load1 + load

            fmLoadingBar.Label1.width = load1

        Next a
    Unload fmLoadingBar

    End Sub

显示的表单没有参数,因此默认为模态表单。您需要一个非模态表单,这意味着子表单将在不等待表单卸载的情况下继续。试试这个:

fmLoadingBar.Show vbModeless

循环可能不会给程序(Excel)时间来执行您要求的其他事件(例如在屏幕上绘制图形,或听鼠标滚动等)。要让Excel在循环中“查看”要执行的其他事件,可以在循环中使用
DoEvents
。但是要当心,因为这会让你付出代价,因为你的表现是一样的。先不使用它进行测试。

当显示无模式表单时,会发生什么情况?sub是否仍在等待表单关闭?您可以先尝试加载表单,所以在显示表单之前。只需
加载fmLoadingBar
。表单显示/计时器旋转,但没有加载条的动画?我想应该有用。负载在这一端不起作用。不过,我已经想出了一些办法,如果我选择另一个打开的窗口,该条将按预期加载?哦,那么子节点现在可以工作了。您可以尝试在循环中重新绘制表单,因此在设置栏的宽度后,可以使用fmLoadingBar.Redraw