我想用vba创建一个进度条来可视化我的代码进度。因此,我创建了一个名为PB的简单用户表单,其中包含2个标签。这些标签的长度正在被改变很多次以显示代码的进度。我的问题是我希望调整这些标签的大小,但是变化是不可见的。还有一些标签在某些时候被重命名,但我也遇到了同样的问题。
所以这是我的缩短代码,它只显示引用userform PB的行。
此代码位于标准模块中,包含子Start,它是我的过程的起点:
Public Sub Start()
PB.Show
PB.Label2.Width = 100
PB.Label5.Width = 100
PB.Caption = "Please wait, files are being analyzed!" 'Header of the userform
PB.Label7.Caption = "Testing"
PB.Repaint
DoEvents
End Sub
userform PB的模块中只有很少的代码:
Private Sub UserForm_Activate()
Label2.Width = 0
Label5.Width = 0
End Sub
只有2行,但执行了对width = 0的更改。当该子程序结束时,执行start子的其余部分。宽度为100分配给标签,更多标签被重命名,但这些更改不可见。
如您所见,我尝试使用Repaint和DoEvents,但在我的情况下它没有帮助。我需要找到一种方法来从外部模块(而不是userform的模块)操纵userform。你可以帮助我?你有好主意吗?
答案 0 :(得分:0)
对于迟到的重播感到抱歉,但我不想让我的问题无法回答。我找到了一种方法,或者可能是我没有显示对userform的更改的原因。
以前,如我的问题所示,我有一个子Start(),当按钮(用户表单)被点击时启动。然后Start() - sub启动我的userform,称为“PB”。 所以就是这个顺序:
我发现样本中只有两个差异,我从中获取代码。我将按钮更改为Active-X控件并按以下顺序:
按钮代码:
Private Sub CommandButton2_Click()
PB2.Show
End Sub
PB-userform的代码:
Private Sub UserForm_Activate()
Label2.Width = 0
Label5.Width = 0
Call Main.Start
End Sub
现在,Start() - sub的所有更改都是可见的,并在“DoEvents”中执行。当然,Start() - sub中的“PB.Show”是不必要的,因为PB-userform已经可见。
对我来说,主要的变化是用户窗体调用了Start() - sub。我无法解释为什么首先调用userform是必要的,但不知何故感觉就像userform现在有“控件”或类似的东西。也许其他人可以解释这个。
编辑: 最后更新:我发现用户窗体在我按照我的问题所述尝试时没有更新的原因。保持简短:
PB.Show vbmodeless
因此show-method有一个选项。如果没有“vbmodeless”,表单将等待用户操作/输入。但是使用“vbmodeless”选项,表单可以自行运行。如果您想了解更多信息,请查看show的VBA帮助。