VBA用户窗体加载栏将不会运行直到窗口closures

我似乎无法解决为什么这不会工作。 我想为每个A用户窗体中的标签增加宽度。

但是,当我运行它的子不会运行,直到窗体closures。 我怎样才能阻止?

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 

您的表单显示为无参数,因此默认为模态forms。 你需要一个非模态forms,这意味着子将继续而不用等待表单卸载。 尝试这个:

 fmLoadingBar.Show vbModeless 

循环不会让程序(Excel)有时间去做其他事件,然后你要求它(例如在屏幕上绘制graphics,或者听鼠标滚动等等)。 为了让Excel在循环中查找其他要执行的事件,可以在循环中使用DoEvents 。 但要小心,因为这会花费你,performance。 没有它先testing。