Excel VBA用户窗体加载栏在窗口关闭之前不会运行
我似乎不明白为什么这行不通。我希望在userform中为每个A添加标签以增加宽度 但是当我运行它的时候,子系统的其余部分在窗体关闭之前不会运行。我怎样才能阻止这一切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
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