excel图表使用VBA创建进度条
发布时间:2022-09-05 20:01:13
当你的程序执行时间较长时,使用一个进度条来展示程序执行的状态是非常必要的。
进度条设计
打开VBE,插入一个用户窗体。
1.在属性窗口中,将该用户窗体命名为urfProgress。
2.设置其ShowModal属性为False,这样在该用户窗体处于打开状态时仍能继续运行程序。
3.调整该用户窗体为合适的大小(高110*宽240)。
进行适当设置后,目前表示进度条的用户窗体如下图1所示。
图1
在用户窗体中插入一个标签控件,用于显示指示程序状态的文本。在属性窗口将其命名为lblCaption,调整该标签的大小以便有足够的空间来容纳将要显示的文本,这里设置其Width属性为174,设置其Caption属性为空(即没有文本)。此时,表示进度条的用户窗体如下图2所示。
图2
接下来,在用户窗体中插入一个框架控件。使该框架在水平和垂直方向上大致居于用户窗体中心,并位于前面添加的标签下方,如下图3所示。
图3
设置框架的属性。将其命名为fraProgress,设置其Caption属性为空(即没有文本),修改其SpecialEffect属性为“2-fmSpecialEffectSunken”。此时,表示进度条的用户窗体如下图4所示。
图4
随后,再插入一个标签。该标签中不会显示任何文本,但是随着程序的运行,该标签长度会不断增加来填充刚刚创建的框架。
1.插入一个标签并放置在刚创建的框架里面,调整尺寸使其与框架重合,如下图5所示。
图5
2.将该标签命名为lblProgress。
3.修改其Caption属性为空(即没有文本)。
4.修改其BackColor属性为你想要的颜色。
5.修改其SpecialEffect属性为“1-fmSpecialEffectRaised”。
此时,表示进度条的用户窗体如下图6所示。
图6
编写程序
隐藏标题栏
在VBE中插入一个标准模块,输入下面使用Windows API的代码来隐藏用户窗体的标题栏:
Public Const GWL_STYLE = -16
Public Const WS_CAPTION = &HC00000
#If VBA7 Then
Public Declare PtrSafe Function GetWindowLong _
Lib “user32” Alias “GetWindowLongA” ( _
ByVal hWnd As Long,_
ByVal nIndex As Long) As Long
Public Declare PtrSafe Function SetWindowLong _
Lib “user32” Alias “SetWindowLongA” ( _
ByVal hWnd As Long,_
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Public Declare PtrSafe Function DrawMenuBar_
Lib “user32” ( _
ByVal hWnd As Long) As Long
Public Declare PtrSafe Function FindWindowA_
Lib “user32” (ByVallpClassName As String, _
ByVal lpWindowName As String) As Long
#Else
Public Declare Function GetWindowLong _
Lib “user32” Alias “GetWindowLongA” ( _
ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong _
Lib “user32” Alias “SetWindowLongA” ( _
ByVal hWnd As Long,_
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Public Declare Function DrawMenuBar _
Lib”user32″ ( _
ByVal hWnd As Long) As Long
Public Declare Function FindWindowA _
Lib”user32″ (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
#End If
Sub HideTitleBar(frm As Object)
Dim lngWindow As Long
Dim lFrmHdl As Long
lFrmHdl = FindWindowA(vbNullString,frm.Caption)
lngWindow = GetWindowLong(lFrmHdl,GWL_STYLE)
lngWindow = lngWindow And (Not WS_CAPTION)
Call SetWindowLong(lFrmHdl, GWL_STYLE,lngWindow)
Call DrawMenuBar(lFrmHdl)
End Sub
用户窗体初始化
在用户窗体urfProgress中,添加Initialize事件代码:
Private Sub UserForm_Initialize()
Me.Height = Me.Height – 10
HideTitleBar.HideTitleBar Me
End Sub
显示进度条
本文的示例以遍历工作表所有已使用的行来更新进度条:
Sub DemoProgress()
Dim i As Long
Dim lngLastRow As Long
Dim pct As Single
lngLastRow = Range(“A” &Rows.Count).End(xlUp).Row
‘进度条宽度从0开始
urfProgress.lblProgress.Width = 0
urfProgress.Show
For i = 1 To lngLastRow
pct = i / lngLastRow
‘计算进度条百分比并增加相应宽度
With urfProgress
.lblCaption.Caption = “正在处理” & lngLastRow &”行中的第” & i & “行.”
.lblProgress.Width = pct *(.fraProgress.Width)
End With
DoEvents
‘可以在这里插入真正要执行操作的程序
‘如果进度完成则卸载用户窗体
If i = lngLastRow Then Unload urfProgress
Next i
End Sub
运行程序后的效果如下图7所示。
图7
上面的示例是在程序中刚好也有循环时,在执行循环过程的同时显示进度条。但是,如果没有循环呢?也可以模拟程序执行进度:
Sub DemoProgress2()
‘开始显示进度条
urfProgress.lblProgress.Width = 0
urfProgress.Show
‘模拟完成进度
DoPrecent (0)
‘放置程序代码
‘模拟完成进度
DoPrecent (0.25)
‘放置程序代码
‘模拟完成进度
DoPrecent (0.5)
‘放置程序代码
‘模拟完成进度
DoPrecent (0.75)
‘放置程序代码
‘模拟完成进度
DoPrecent (1)
‘卸载窗体,即关闭进度条
Unload urfProgress
EndSub
Sub DoPrecent(pctdone As Single)
With urfProgress
.lblCaption.Caption = pctdone * 100& “% 完成”
.lblProgress.Width = pctdone *(.fraProgress.Width)
End With
DoEvents
End Sub
如果过程占用大量资源,可能会发现进度条不更新或显示为白色,此时可在End With前面添加代码:
urfProgress.Repaint
强制VBA重新绘制进度条,这样在每次更改用户窗体时都会更新。


猜你喜欢
- win11系统与旧系统相比,在这些方面进行了重大更新:新的开始菜单、通知中心、重新设计的任务栏以及更加美观的圆角窗口,确实给用户带来了不一样
- 今日凌晨苹果推送了iOS 12.3正式版,很多iPhone用户早就迫不及待了吧!作为正式版,不管新增内容多不多,肯定是要简单的修补之前的bu
- 我们在使用win10系统的时候,有些情况下需要通过运行中打开gpedit.msc服务来进行一些操作。但是如果出现了找不到gpedit.msc
- 这篇文章主要介绍了Win8/Win8.1蓝牙脱机的原因和解决图文步骤,希望对用Win8/Win8.1系统的朋友来说有帮助 Win8
- 在写EXCEL公式的时候,经常遇到相对引用、绝对引用与混合引用。相对引用是指,公式进行填充的时候,从属单元格与引用单元格的相对位置不变;绝对
- 在黑掉自己的计算机,并发现存在于过去20年英特尔生产的大多数芯片中一处缺陷的那个晚上,丹尼尔·格鲁斯(Daniel Gruss)几乎彻夜未眠
- PPT培训模板在哪里?ppt中有很多模板,想要使用培训模板,该怎么使用呢?下面我们就来看看PPT使用培训模板的教程,需要的朋友可以参考下今天
- win10取消登陆密码设置起来非常的简单,但是很多用户不知道怎么设置,只要通过简单的一个指令就可以进入设置的地方。想要取消登录密码的用户快点
- office激活过程种提示:无法与服务器联系,请几分钟后再试我们可以分析原因:解决办法:1. 如果是破解软件封堵,我们可以这样做:首先到“控
- 在制作wps演示文稿的时候,经常会用到辅助线,那么,具体的使用方法是怎样的呢?下面就让小编告诉大家在wps演示制作如何使用辅助线。在wps演
- 很多使用win10系统的小伙伴发现,打开桌面右键的时候,里面没有用管理员身份运行的选项,那么我们该如何恢复这个选项呢?其实我们只要在设置里把
- 想要看到电脑配置能得几分,需要打开win7/win8.1的Win32版《游戏》程序。但开始菜单已没有打开该程序的“入口”了想要看到电脑配置能
- 在我们平时使用word文档办公时,经常会接触到WPS格式的文字。它是金山文档的文字类型,具有许多精美的模板和强大的编辑功能。那么在实际操作中
- WinXP系统一直弹出windows文件保护提示怎么办?有时候要删除一些文件却提示windows文件保护窗口提示,如何解决这个问题?下面请看
- 一、非手动设置页边距方法1、点击下图红框中的“页面布局”选项。2、接着点击下图红色箭头所指的“页面设置”按钮。3、然后点击下图红框中的“页边
- 当遇到Win10专业版系统开机后一直卡在磁盘修复页面时应该如何解决呢?下面小编就给大家带来Win 10专业版遇到一直卡在磁盘修复界面时,应当
- 腾讯会议怎么看谁迟到了?在使用腾讯会议发起会议的时候,会议发起者如果想要查看参加会议的用户有谁迟到了该怎么去看呢?其实在软件中每一个参加会议
- 升级win11安装失败解决方法?win11系统推出后,升级Win11的朋友是越来越多了,但是很多用户都遇到过安装Win11系统安装失败,那升
- 不要看bios界面全是英文就觉得很难操作,其实操作方法很简单,让我们一起来看看小编是如何教大家惠普bios更改内存频率怎么操作的。1、在开机
- 在好几天内,你都可能使用Word编辑同一篇文章。这样,在这段时间你是不是希望一经启动Word,就自动打开该篇文章,并定位上次编辑时插入点所在