更新Excel Userform不起作用

时间:2013-11-18 21:53:19

标签: excel vba

我想用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。你可以帮助我?你有好主意吗?

1 个答案:

答案 0 :(得分:0)

对于迟到的重播感到抱歉,但我不想让我的问题无法回答。我找到了一种方法,或者可能是我没有显示对userform的更改的原因。

以前,如我的问题所示,我有一个子Start(),当按钮(用户表单)被点击时启动。然后Start() - sub启动我的userform,称为“PB”。 所以就是这个顺序:

  1. 按钮(用户表单)调用
  2. Start() - sub然后调用
  3. PB-用户窗体
  4. 我发现样本中只有两个差异,我从中获取代码。我将按钮更改为Active-X控件并按以下顺序:

    1. 按钮(Active-X)调用
    2. PB-Userform调用
    3. 开始() - 子。
    4. 按钮代码:

      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帮助。