使用VBA的进度条

问题描述

我正在使用VBA处理excel工作表:我正在尝试测试进度条。我已经完成了设计,如下所示:

Design

userForm代码下面:

'PLACE IN YOUR USERFORM CODE
Private Sub UserForm_Initialize()
#If IsMac = False Then
    'hide the title bar if you're working on a windows machine. Otherwise,just display it as you normally would
    Me.Height = Me.Height - 10
    HideTitleBar.HideTitleBar Me
#End If
End Sub

Module代码下面:

'PLACE IN A STANDARD MODULE
Sub LoopThroughRows()
Dim i As Long,lastrow As Long
Dim pctdone As Single
lastrow = Range("A" & Rows.Count).End(xlUp).Row

'(Step 1) Display your Progress Bar
ufProgress.LabelProgress.Width = 0
ufProgress.Show
For i = 1 To lastrow
'(Step 2) Periodically update progress bar
    pctdone = i / lastrow
    With ufProgress
        .LabelCaption.Caption = "Processing Row " & i & " of " & lastrow
        .LabelProgress.Width = pctdone * (.FrameProgress.Width)
    End With
    DoEvents
        '--------------------------------------
        'the rest of your macro goes below here
        '
        '
        '--------------------------------------
'(Step 3) Close the progress bar when you're done
    If i = lastrow Then Unload ufProgress
Next i
End Sub

运行代码时,出现此错误:

Debug screen

当我按Debug时,它会突出显示:

ufProgress.LabelProgress.Width = 0

更多信息

UserForm名称为( ufProgress ),该标签位于UserForm左上角,用于显示指示状态名称( LabelCaption )的文本。 。以及UserForm名称( FrameProgress )上的框架.. Finlay,另一个要增长的标签,是进度指示器名称( LabelProgress )..

任何建议...

亲切问候

解决方法

VBA中的一个用户窗体是一个对象,您需要先创建对象的实例,然后才能使用它。但是,如果您通过用户窗体的类名(窗体名称)访问它,则VBA创建用户窗体的默认实例的行为就很好地掩盖了这一事实。

请考虑您有一个名为Form1的表单,并编写了Form1.Show:VBA将创建该表单的一个实例并显示它。

另一种方法是声明形式类型的变量,手动创建它,然后使用该变量:

Dim ufProgress as Form1
set ufProgress = new Form1
ufProgress.Show

通常最好做最后一个,但是在特殊情况下,您可以继续使用默认实例-因为该表单仅用于显示(如果您将数据输入到用户表单中并且想要使用它,使用默认实例可能会导致一些意外问题。


仍然考虑将您的表单命名为“ Form1”,您可以通过以下方式解决问题

a)将表单重命名为ufProgress
b)在您的代码中将ufProgress替换为Form1
(在两种情况下,您都将访问自动生成的表单实例)
c)使用上面的代码段。


更新-了解更多信息后:
在调试器中显示的这一行是令人误解的,该有罪声明(最有可能)在表单的UserForm_Initialize代码内,但是直到您告诉调试器为止,调试器才会在那里停止: ,打开“选项”窗口(“工具”->“选项”),选择“常规”选项卡,然后选择“类中断”。我猜想命令HideTitleBar.HideTitleBar Me会引发该错误。要么删除该行(并保留表格显示其标题的事实),要么找到HideTitleBar的定义。

enter image description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...