VBA Microsoft Excel 中的进度条

2025年2月28日 | 阅读 20 分钟

众所周知,在 Microsoft Excel 中,VBA 的相应进度条是一个可视化工具,用于在执行耗时任务(如有效处理数据、生成报告或执行大量计算)时向用户提供实时反馈。如果没有此类功能,用户常常会不确定任务需要多长时间,或者 Microsoft Excel 是否已冻结。进度条通常通过提供一种简单的方法来显示任务已完成多少以及还剩多少来解决此问题。它充当一个指示器,让用户保持知情和参与,从而有效防止等待过程中的沮丧。

通常,相应的进度条可以有多种形式,但在 Microsoft Excel VBA 中,它通常通过用户窗体 (UserForm) 来实现。该窗体会显示一个矩形条,随着任务的进行而填充。在后台,VBA 代码会运行一个循环或高效地执行一系列任务,并定期更新进度条以提供视觉反馈。这不仅使任务看起来更具交互性,而且通过提供任务完成前的剩余时间感,有助于管理用户期望。要实现进度条,需要各种基本的 VBA 技能。我们需要创建一个用户窗体,插入一个标签或框架控件作为进度条,并编写代码来在任务前进时更新进度条。完成百分比可以通过将当前迭代或步数除以总步数并乘以100来有效计算。然后使用此百分比来有效调整进度条的宽度。

在本教程中,我们将学习 Microsoft Excel 中的 VBA 进度条及其优点,并通过示例进行演示,以便更好地理解概念。

Microsoft Excel 中的 Visual Basic for Applications (VBA) 是什么意思?

众所周知,“Microsoft Excel 中的 Visual Basic for Applications (VBA) 主要用于为 Windows 操作系统编写程序。它在 Microsoft Office (MS Office, Office) 应用程序(包括 Access、Excel、PowerPoint 和 Publisher 等应用程序)中作为内部编程语言运行。”

相应的 VBA 通常被认为是 Microsoft Corporation (MSFT) 的传统软件 Visual Basic 的一部分。它还允许用户轻松地自定义超出 MS Office 主机应用程序通常提供的功能。

VBA 是一种事件驱动的工具。我们可以轻松地通过将命令输入编辑模块来告诉计算机执行操作或一系列操作,从而有效地构建自定义宏指令(宏)。通常,VBA 不是一个独立的程序。它通常还允许用户有效地操作各种图形用户界面 (GUI) 功能,如工具栏、菜单、对话框和窗体。我们还可以使用 VBA 来高效地创建用户定义函数 (UDF),访问 Windows 应用程序编程接口 (API),以及自动化特定的计算机进程和计算。

Excel VBA 进度条是什么意思?

“Microsoft Excel 中的 Excel VBA 进度条被定义为一种图形用户界面元素,可在 Excel 工作簿中执行的任务进度时提供视觉反馈。当我们运行耗时的 VBA 宏或需要一些时间才能完成的进程(如导入数据、计算或数据分析)时,通过使用进度条,可以提高用户体验,向用户表明正在进行某些操作,并指示任务的进展程度。”

现在让我们考虑以下示例

VBA Progress Bar in Microsoft Excel

这个例子通常演示了如何在不使用用户窗体的情况下有效实现 VBA 进度条,而是使用Application.StatusBar 来显示进度。

该程序通常计算 100 步的进度,这些进度以百分比格式显示在状态栏中。应用程序会等待 1 秒钟。所有步骤完成后,会弹出一个消息框,告知用户所有进度都已成功完成。输出如下图所示

VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel

优点

众所周知,在 Microsoft Excel 中的 VBA(Visual Basic for Applications)中使用进度条可以在运行长时间任务或复杂操作时极大地改善用户体验。进度条主要为用户提供任务已完成多少以及还剩多少的清晰指示,从而帮助我们管理期望并有效通知用户。以下是 VBA for Excel 中加入进度条的五个关键有效优势,用简单的术语解释

  1. 为用户提供视觉反馈:在 Microsoft Excel 中运行长时间进程时,例如导入大量数据或执行各种繁重的计算,很难知道需要多长时间。没有任何进度指示,用户可能会认为程序已冻结或崩溃。这最终会导致沮丧,在某些情况下,用户可能会强制关闭程序,导致数据丢失或进程不完整。进度条通过提供视觉反馈来提供帮助。它还向用户显示任务的进展程度以及剩余多少,让他们放心进程仍在运行。这也可以减轻焦虑,因为即使任务很慢,用户也会知道程序仍在工作并取得进展。移动的进度条提供了一种简单明了的方式来跟踪任务状态,而无需任何技术知识。
  2. 让用户保持参与和知情:进度条不仅提供反馈,而且还会让用户在整个过程中保持参与。在处理大量数据或复杂计算时,如果没有指示正在发生什么,用户可能会感到脱节或困惑。进度条主要让用户了解情况,从而使等待过程更易于忍受。
    • 例如,如果用户运行一个需要六分钟才能完成的宏,看到进度条移动有助于用户了解任务正在按预期进行,并且将成功完成而不会出错。没有进度条,用户就会一无所知,导致不耐烦和沮丧。这样的简单视觉效果可以通过有效地显示任务正在积极地向完成迈进来改善用户体验。
  3. 为我们的项目增添专业外观:我们都知道使用进度条可以让我们 Microsoft Excel 项目看起来更完善、更专业。它还表明我们考虑了用户体验,并付出了额外的努力使我们的工具更易于使用。包含进度指示器的应用程序通常被认为更用户友好且考虑周到,特别是与不提供任务进度反馈的项目相比。在专业环境中,尤其是在为客户、同事或外部利益相关者开发工具时,添加进度条还可以帮助我们提升项目的整体演示效果。它表明我们通常已确保流程感觉流畅且直观,这可以使我们的工作显得更加精炼和以用户为中心。
  4. 有助于有效的错误处理和调试:进度条也是一个有用的工具,可以用于有效的错误检测和调试。由于进度条在进程的各个阶段进行更新,因此也有助于我们识别可能发生错误的地方。如果任务停止并且进度条在30%处冻结,那么对于该特定实例,我们可以轻松地查明问题已在该进程阶段发生。这将有助于缩小查找错误的范围,从而使调试更简单、更快。没有进度条,我们可能需要重复运行整个进程以确定哪里出了问题。然而,有了进度条,我们可以更轻松地识别失败点,并可以有效地专注于修复任务的特定部分。
  5. 有助于优化性能和监控进程:相应的进度条不仅是有效用户参与的工具,还可以用于“优化性能”。通过观察进度条在不同阶段的移动速度,我们可以轻松了解进程的哪些部分花费的时间更长。这将帮助我们有效识别瓶颈并进行改进。
    • 例如,如果进度条开始时移动很快,但在中途逐渐减慢,这可能表明某些类型的计算和数据操作非常低效。然而,有了这些信息,我们可以轻松地专注于优化所有这些区域,以有效地加快整个进程。除此以外,我们可以轻松地利用各种进度条来确保资源根据进程的相应展开而被适当地分配。

通常,我们都知道将进度条添加到 Microsoft Excel 的 VBA 中主要提供了广泛的好处。它主要提供视觉反馈,最终减少用户的沮丧感,并使他们保持参与和知情。它还将使我们的项目具有更专业的外观。尽管如此,它还可以通过显示进程可能中断的位置来帮助我们有效地检测错误,并允许通过突出显示工作流中缓慢的区域来优化性能。总的来说,进度条增强了我们 Microsoft Excel 工具的功能和可用性,从而使其更易于使用且高效。

如何在 VBA Microsoft Excel 中创建自己的进度条?

现在,为了创建我们自己的自定义进度条,我们需要一步一步地有效地遵循以下步骤:

步骤 1:打开首先,我们需要访问 Microsoft Excel 中提供的“开发工具”选项卡。如果我们看不到“开发工具”选项卡,那么我们可以通过转到“文件” -> “选项” -> “自定义功能区”,然后勾选“开发工具”选项来启用它。启用后,我们将单击“开发工具”选项卡,然后必须单击“Visual Basic”按钮。这将打开 VBA 编辑器。在 VBA 编辑器中,我们需要转到工具栏并单击“插入”选项,然后选择“UserForm”。这将创建一个空白窗体,我们的进度条将在其中构建。

VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel

步骤 2:自定义用户窗体属性:现在,在此步骤中,我们需要拥有我们的用户窗体,然后我们可以轻松地自定义其外观。在相应的 VBA 编辑器中,查找“属性”窗口(通常位于左下角)。在这里,我们可以轻松地更改诸如窗体的背景颜色、大小和标题(窗口顶部的标题)等内容。在自定义用户窗体时,请专注于设置其大小以适应我们所需的进度条尺寸。

VBA Progress Bar in Microsoft Excel

步骤 3:插入和自定义框架:接下来,我们需要在选定的用户窗体中插入一个“框架”。在此示例中,框架将充当包含进度条的容器。为了添加它,我们将从工具箱中选择框架工具(如果我们看不到工具箱,则必须转到“视图” -> “工具箱”)。在将框架添加到我们的相应用户窗体后,我们还可以使用“属性”窗口来调整其大小和外观。我们可能希望给框架一个有意义的标题,例如“进度”,以便有效地帮助用户理解其功能。

VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel

步骤 4:创建用于进度条的标签:现在,在此特定步骤中,我们需要模拟进度条,为此我们需要在选定的框架内插入一个“标签”。通常,此标签将是进度的视觉表示,随着进程的进行而扩展其宽度。最初,我们将标签的宽度设置为 0,因为它会随着进度的进行而增加。调整其背景颜色以确保进度条脱颖而出,并使用属性窗口有效地将其定位在框架内。

VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel

步骤 5:添加 VBA 代码以控制进度条:现在,在此步骤中,我们将编写控制进度条的代码。之后,我们需要双击用户窗体,这将打开该窗体的代码编辑器。在代码编辑器的顶部,您会看到一个下拉菜单。

VBA Progress Bar in Microsoft Excel

现在将选择从“Click”更改为“Activate”。这意味着当用户窗体被激活(或打开)时,代码将运行。

代码


VBA Progress Bar in Microsoft Excel

步骤 6:编写 For 循环来模拟进度:在此特定步骤中,我们需要初始化一个FOR 循环来有效地模拟进度条。

代码


VBA Progress Bar in Microsoft Excel

在 FOR 循环中,我们可以让应用程序等待 1 秒钟。为了模拟进度,我们可以缓慢增加在步骤 4中主动定义的进度标签的宽度。然而,框架中的标题也在FOR 循环中递增。为了改变宽度,我们可以有效地使用DoEvents函数来实时执行 VBA 进度条控件。

代码

步骤 7:运行用户窗体:在此特定步骤中,一旦代码准备就绪,我们就可以通过运行相应的用户窗体来测试进度条。为了实现这一点,我们可以轻松地按键盘上的 F5 键,或者在 VBA 编辑器中单击“运行”按钮。用户窗体将出现在屏幕上,并且随着循环的运行,进度条将缓慢填充。我们可以根据我们的需求和要求轻松修改进度条的结果。

VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel

现在,通过这个例子,我们知道了如何轻松创建进度条,让我们来看看下面提到的一些更多示例,以便更彻底地理解概念。

示例

下面是一些示例,通常演示如何有效地使用进度条来检查我们相应选定任务的进度。

#示例 1:在 VBA Microsoft Excel 中创建进度条

现在让我们有效地考虑一个我们需要找出函数进度条的例子。这可以通过将用户窗体声明为相应的进度条来轻松完成。

步骤 1:创建子程序:首先,我们需要创建一个子程序,它将有效地执行将 1 到 100 的数字相乘的任务,这将是我们最终想通过进度条跟踪的任务。

代码


VBA Progress Bar in Microsoft Excel

步骤 2:初始化用于存储乘积的变量:在此特定步骤中,我们将初始化一个乘积变量,该变量用于存储 100 个数字的乘积值,然后将其赋值为 1。

代码


VBA Progress Bar in Microsoft Excel

步骤 3:使用 For 循环乘以数字:现在,在此特定步骤中,我们需要使用For 循环有效地遍历从 1 到 100 的数字,然后将它们全部相乘,通常这个循环将在我们之前创建的子程序中运行。

代码


VBA Progress Bar in Microsoft Excel

现在我们有了这个函数,让我们看看它的进度条。

步骤 4:打开 VBA 编辑器:为此,首先我们需要转到工具栏中提供的“开发工具”选项卡,然后单击“Visual Basic”选项。现在,VBA 编辑器打开以添加函数以及 Sub 过程。然后,我们将单击“插入”“Userform”按钮以创建新的用户窗体或空白页。

VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel

步骤 5:自定义用户窗体:在这一点上,我们不需要对选定的用户窗体本身进行任何更改。用户窗体通常用作相应进度条的容器。自定义用户窗体的属性,如下所示

VBA Progress Bar in Microsoft Excel

并且可以看到,这里也没有做任何更改。

步骤 6:将框架插入选定的用户窗体:在此特定步骤中,我们需要从相应的工具箱中插入框架控件,此框架将容纳进度条。接下来,我们需要设置选定框架的尺寸以适合进度条的大小。

VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel

步骤 7:为进度条添加标签:现在,在标签控件内部。此特定标签将充当进度条,随着任务的有效进行而填充。之后,我们需要自定义标签的属性,例如,将初始宽度设置为 0,然后将背景颜色设置为绿色。

VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel

步骤 8:打开用户窗体代码:在这里,在此步骤中,我们需要双击 VBA 进度条用户窗体以打开编辑器。但是,在代码编辑器中,我们需要将默认操作从Click更改为activate,这意味着一旦相应的用户窗体激活,代码就会运行。

VBA Progress Bar in Microsoft Excel <

转到下拉菜单并将功能从 Click 更改为 Activate。它将显示用户窗体子程序为

代码


VBA Progress Bar in Microsoft Excel

步骤 9:实现进度条逻辑:在这里,在此步骤中,我们需要编写逻辑以在乘法任务运行时有效地更新进度条,并且通常随着循环的每个步骤完成,相应的进度条宽度会增加。

代码


VBA Progress Bar in Microsoft Excel

FOR 循环中,我们需要调用前面声明的乘法函数。之后,我们可以让它等待 1 秒钟以模拟进度,因为它否则会太快,并且通常为了模拟进度,我们可以缓慢增加前面定义的进度标签的宽度,而为了改变宽度,我们可以使用DoEvents函数来实时执行 VBA 进度条控件。

代码

步骤 10:运行用户窗体:现在,最后,我们可以通过按键盘上的快捷功能键 F5,或者返回 Microsoft Excel 并触发相应的选定用户窗体来运行相应的用户窗体。随着任务的进行,您应该能够看到进度条更新,标签逐渐填充。

VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel

#示例 2:在 Microsoft Excel VBA 中创建自定义进度条

对于这种情况,现在让我们有效地考虑一个我们需要创建 10 个工作表,每个工作表有十列的例子,并且可以使用自定义进度条来主动完成。

步骤 1:创建用户窗体:首先,我们需要单击“插入”“Userform”按钮来创建新的用户窗体或空白页。

VBA Progress Bar in Microsoft Excel

步骤 2:删除网格线:现在,在此特定步骤中,我们将返回 Microsoft Excel 工作表,然后转到“视图”部分。在这里,我们需要有效地取消勾选网格线。

VBA Progress Bar in Microsoft Excel

然而,通过取消勾选网格线选项,我们将看到工作表看起来像一个空白的无规则纸。

VBA Progress Bar in Microsoft Excel

步骤 3:选择首选形状:在此特定步骤中,我们需要转到工作簿中提供的“插入”部分,然后选择我们首选的形状以满足我们的需求。

VBA Progress Bar in Microsoft Excel

步骤 4:添加文本:在此特定步骤中,在有效选择形状后,我们现在需要向其添加文本,可以通过右键单击并单击“编辑文本”选项来完成。

VBA Progress Bar in Microsoft Excel

步骤 5:自定义属性:然后我们将转到之前创建的 VBA 进度条用户窗体,并根据我们的需求有效地自定义其属性。

VBA Progress Bar in Microsoft Excel

并且保持“ShowModal”“False”非常重要。

步骤 6:创建框架:在此特定步骤中,我们需要创建一个新框架并使其有效地覆盖用户窗体。

VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel

步骤 7:自定义属性:同样,我们需要在给定的属性选项卡中自定义框架的属性。

VBA Progress Bar in Microsoft Excel

步骤 8:创建标签:在此步骤中,我们将创建用于有效显示进度条的标签。

VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel

步骤 9:更改标签属性:在这里,在此步骤中,我们将相应地更改选定标签的属性。

VBA Progress Bar in Microsoft Excel

通过执行上述步骤,我们将看到如下的用户窗体

VBA Progress Bar in Microsoft Excel

步骤 10:创建模块:在此特定步骤中,我们将创建一个模块,为此我们需要转到“插入”部分,然后单击“Module”选项。

VBA Progress Bar in Microsoft Excel

步骤 11:创建子程序:在此步骤中,我们将创建一个子程序,用于创建 10 个工作表,然后将它们重命名为WS1WS2 等。

代码


VBA Progress Bar in Microsoft Excel

步骤 12:声明变量:在此步骤中,我们需要声明变量 start、sheet 总数、完成量和标签宽度。

代码


VBA Progress Bar in Microsoft Excel

步骤 13:声明工作表编号和进度条宽度:在此步骤中,我们将声明工作表总数以及进度条的宽度以及我们之前提到的标签名称。

代码


VBA Progress Bar in Microsoft Excel

步骤 14:初始化 FOR 循环:在此特定步骤中,我们将有效地初始化一个 FOR 循环,以从 1-10 添加 10 个工作表,并在选定的工作表中命名十列。

代码


VBA Progress Bar in Microsoft Excel

这里,应用程序在每个循环完成后会等待 1 秒钟。此外,我们需要使用 Microsoft Excel VBA 中的NAME函数来更改工作表名称。我们还需要将选定的进度条与完成的百分比值保持一致。

步骤 15:更改宽度:在此步骤中,我们将使用完成百分比值来更改选定的用户窗体进度标签的宽度。尽管如此,我们还需要根据进度增加来有效地更改进度标签的标题。

代码


VBA Progress Bar in Microsoft Excel

步骤 16:显示 VBA 进度条:在此步骤中,我们将显示 VBA 进度条用户窗体,为此我们需要创建另一个子程序。

代码


VBA Progress Bar in Microsoft Excel

步骤 17:之后,我们需要转到用户窗体,并双击它。

VBA Progress Bar in Microsoft Excel

紧接着,我们将看到Private Sub UserForm_Click()。现在我们将单击下拉部分,然后需要选择Activate选项。

VBA Progress Bar in Microsoft Excel

通过遵循上述步骤,我们将看到如图像所示的子程序。

代码


VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel

步骤 18:现在我们将进度标签的宽度设置为 0,然后调用ActivityProcess子程序。

代码


VBA Progress Bar in Microsoft Excel

步骤 19:转到第 4 步中安装的形状,然后需要单击“分配宏”选项。

VBA Progress Bar in Microsoft Excel

步骤 20:现在,在此特定步骤中,我们将选择Show_form()子程序。

VBA Progress Bar in Microsoft Excel

现在,如果我们单击“插入工作表”,我们就可以在宏运行时初始化 VBA 进度条。

代码

步骤 21:单击“插入工作表”按钮后,我们将能够看到如下输出

VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel
VBA Progress Bar in Microsoft Excel

从进度条中,我们可以轻松地看到已打印了多少个具有列 1-10 的工作表。

重要提示

众所周知,在 Microsoft Excel 中创建 VBA 进度条时,有许多重要事项需要牢记。

  1. 应牢记所选的进度条准确地反映了任务的进度。通过这一点,个人可以轻松地使用标签、工具提示或其他方式来解释任务以及为什么它可能需要时间。
  2. 如果适用,应考虑以有意义的单位显示进度,而不仅仅是百分比。例如,如果我们正在处理记录,则显示正在处理的记录号。
  3. 在更新进度条后,积极建议使用DoEvents语句,以便用户窗体能够实时刷新。
  4. 建议避免进度条移动过快或过慢。进度应有效地准确反映任务的实际进度。
  5. 并且必须记住,不应使用长操作,因为使用长操作会完全阻塞 UI。