下面我们就来看看在Excel VBA程序创建一个进度指示器。我们已经把进度指示器尽可能简单,但它看上去很专业。你准备好了吗?用户窗体,我们要创建如下所示:

Progress Indicator in Excel VBA

要创建这个用户窗体,请执行下列步骤。

1.打开Visual Basic编辑器。如果项目资源管理器中是不可见,单击视图,工程资源管理器。

2.单击插入,用户窗体。如果工具箱没有自动出现,单击视图,工具箱。您的屏幕应该设置如下。

Userform Screen Setup in Excel VBA

这只是用户窗体包含三个控件。帧控制和两个标签控件。

3.添加帧控制。您可以通过点击从工具箱框架做到这一点。接下来,您可以拖动用户窗体框架控制。您需要更改这个帧控制的一些性质。用鼠标右键单击帧控制,然后单击属性。清空标题字段,设置高度为24和宽度204

4.添加第一个标签控制,并将其放置在框架控件。用鼠标右键单击该标签控件,然后单击属性。名称更改为酒吧,背景色来突出,清空标题字段,设置高度为20和宽度10

5.添加第二个标签控件,并将其放置在框架控件上方。

用鼠标右键单击该标签控件,然后单击属性。

名称更改为文本和标题更改为“0%已完成”。

6.更改用户窗体到进度指示器的标题。

一旦这个已经完成,其结果应与前面显示的用户窗体的图片一致。

7.将工作表上一个命令按钮并添加以下代码行,以显示用户窗体:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

如果您已经通过本网站上的其他用户窗体例子走了,你知道,这是创建子UserForm_Initialize的时间。该子运行时自动用户窗体被加载。因此,当您使用Show方法用于用户窗体,代码将自动执行。取而代之的是子UserForm_Initialize的,我们创建了子UserForm_Activate。通过使用这种子,Excel的VBA可以更新用户窗体显示宏的进步。

8.打开Visual Basic编辑器。

9.在项目资源管理器,右击UserForm1上,然后单击查看代码。

10.从左边的下拉列表中选择用户窗体。从右侧的下拉列表中选择激活。

11.添加以下代码行:

Private Sub UserForm_Activate()

code

End Sub

说明:本次调用另一个子命名的代码,我们会在一分钟内创建。困惑?你可以通过我们的功能和次章,详细了解潜艇。如果你是在赶时间,只需要执行下面的步骤,你将被罚款。

12.将命名的代码到一个模块中的副(在Visual Basic编辑器,单击插入,模块)。这只是一个例子。这是当你想用这个进度指示器为自己的宏添加自己的代码的地方。代码如下所示。

Sub code()

Dim i As Integer, j As Integer, pctCompl As Single

Sheet1.Cells.Clear

For i = 1 To 100

For j = 1 To 1000

Cells(i, 1).Value = j

Next j

pctCompl = i

progress pctCompl

Next i

End Sub

说明:首先,我们初始化一些变量。接下来,我们清理工作表Sheet1。

我们使用双回路显示从1的值,以1000的前100行的工作表。这将保持Excel的VBA忙碌了一段时间,让我们有机会看到宏的进步。变量pctCompl(缩写percentageCompleted)测量宏的进步。最后,我们调用另一个名为子进步和传递变量pctCompl的值更新窗体。这样我们就可以看到宏的进步! 13.添加另一个子命名的进步。代码如下所示:

Sub progress(pctCompl As Single)

UserForm1.Text.Caption = pctCompl & "% Completed"

UserForm1.Bar.Width = pctCompl * 2

DoEvents

End Sub

说明:第一行代码改变第一个标签控件的标题。第二个代码行改变第二标签控制的宽度。添加的DoEvents更新窗体。

14.退出Visual Basic编辑器,然后单击工作表上的命令按钮:

结果:

Progress Indicator Result

注:该宏,我们使用变量i来衡量进展情况。

例如,在列11,10%完成。这可能是您的宏不同。可变pctCompl的值传递给子进度更新用户窗体的技术是相同的。