问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

excel图表使用VBA创建进度条

发布网友 发布时间:2024-05-28 23:42

我来回答

1个回答

热心网友 时间:2024-06-17 20:52

当你的程序执行时间较长时,使用一个进度条来展示程序执行的状态是非常必要的。
进度条设计
打开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重新绘制进度条,这样在每次更改用户窗体时都会更新。
excel图表使用VBA创建进度条

1.在属性窗口中,将该用户窗体命名为urfProgress。2.设置其ShowModal属性为False,这样在该用户窗体处于打开状态时仍能继续运行程序。3.调整该用户窗体为合适的大小(高110*宽240)。进行适当设置后,目前表示进度条的用户窗体如下图1所示。图1 在用户窗体中插入一个标签控件,用于显示指示程序状态的文本。

Excel如何制作vba运行进度条vba怎么能做出进度条

1、打开一张单元表,我们需要在“完成进度”一列中展示完成的进度。2、选择要插入进度条的单元格。3、在菜单栏中选择“条件按钮”中的“数据条”选项。4、在“数据条”选项中有很多填充方式供我们选择,现在我们选择第一种填充方式。5、在需要插入进度条的单元格中输入我们希望插入的百分数。6、我们可...

怎样利用ExcelVBA实现进度条效果

要建一个窗体,插入progressbar进度条控件。然后进行相关属性的设置,在写入运行的代码。如下图的进度条。是在sheet2中输入了一万个数值运行的进度。

excel vba进度条的问题

vba中没有专门的进度条控件,但是可以用其他方式实现。首先用一个Frame控件(frameProgress)和一个label控件(lblProgress)形成进度条的形状。frameProgress控件用来形成边框,其caption属性用来显示百分比进度;lblProgress控件背景色选择一个较深的颜色,用其width属性控制进度。先写一个过程用于更新显示进度条:...

如何在excel VBA运行时添加进度条(在excel内运行的宏),麻烦大侠指点下...

新建一个"用户窗体",设置合适大小,添加两个"label标签",其中一个用作进度条的边框,即填充区,另一个用作填充实体.在VBA程序内部加入控制代码,当程序开始运行时,调出"用户窗体",当程序运行到某处时,进度条的显示状态,若程序处于循环内部时,可以根据循环次数设定进度条变化状态,还需用DoEvents释放控制权...

怎样利用ExcelVBA实现进度条效果

拖一个白色进度条 再拖一个蓝色进度条,放到白色进度条上面,两个进度条重叠放置 用VBA改变蓝色进度条的宽度 没改变一次宽度,后面加几个DoEvents语句,释放资源给处理器,实现进度条的实时变化

怎样利用excelvba实现进度条效果

1、vba本身有进度条控件,只要添加使用就行了。2、这种进度条与程序运行的真实进度是不相符的,是一种假象,其进度值靠我们用代码赋予它,而且还从一定程度上减缓程序的运行速度。3、这种进度条的控件来源于控件文件(.dll),即便你在自己的电脑运行正常,往往在别的电脑上运行时可能会出错,需要重新...

如何在Excel VBA中设置进度条

Label1.Width = UserForm1.Label2.Width * i / 100 Sleep 100 UserForm1.Repaint Next UserForm1.Label3.Caption = "加载完成!"End Sub窗体内设置3个label, label1背景 label2进度 label3文字。重叠放在一起,label1最低,label2中间,label3置顶 ...

怎样利用ExcelVBA实现进度条效果

1、vba本身有进度条控件,只要添加使用就行了。2、这种进度条与程序运行的真实进度是不相符的,是一种假象,其进度值靠我们用代码赋予它,而且还从一定程度上减缓程序的运行速度。3、这种进度条的控件来源于控件文件(.dll),即便你在自己的

Excel 怎么在VBA程序里加入进度条

有些简单的工作比如读文件,可以按已读出数据与总数据比确定,比如EXCEL中就1000行,遍历一次,可以按行数比确定等等,各种方法都有,但对于一项复杂的工作,如何去确定?真的很难,但方法肯定也很多,我有一种想法,但不太精确的:根据经验值确定运行总时间T, 将实际运行时间除以T确定进度比 ...

excel表进度条 excel进度条不见了 excel实时进度条 excel时间进度条怎么做 excel进度条太长了 excel按日期生成进度条 excel进度条自动变化 excel进度条太短 excel单元格百分比进度条
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
oppor9怎么长截屏啊 怎么从主板的型号来初步看主版的好坏? 膀胱括约肌松弛的症状 恢复感冒嗓子哑的方法 尿道括约肌什么用 怎么从主板型号上看主板性能 梦见辖区合并什么兆头? 2023年2月理发吉祥日 微信拍一拍满屏怎么弄 同等学力在职硕士与统招研究生区别 我在库尔勒和硕领的结婚证能在库尔勒市办理离婚吗 我们在焉耆办的结婚能在库尔勒离婚吗 库尔勒可以离婚的地方在哪? 两次取保候审可以多长时间 中东地区那个国家的冲突最大,回答必采纳 改革开放给中国带来的变化 ppt怎么提取单张图片 ...多少钱(722696)Q龄13年,名片赞30万赞,访客50万,自带6位2000人Q... 河南济源的车牌代码是多少? 冰粉是哪里的特产关于冰粉的简介 房产证丢弃后办新的房产证能立即房屋买卖交易吗? 我们需要了解一个真实的高岗 请问原阳县有多少个乡镇 鱼干有什么做法值得推荐? 鱼干有哪些吃法推荐? 春晚的那个“晃管”表演的衣服是不是像奥特曼的? 罗伯特·奥特曼真正导演成功的第一部影片叫什么名字 奥特曼为什么在宇宙速度比地球快那么多 离光青葵第几集复活 科四过了怎么在交管12123看有驾照? 6s截屏出语言控制求解 反面无情是什么意思反面无情的解释 ...工作需要长期站立,有段时间站立时间每天长达十几个小时。_百度... python3.6怎么输出结果 歌词为"1234567,我的姑娘在哪里"的歌名是什么?是刀郎唱的. 有首流行乐里面有句"一二三四五六七"!叫什么名字啊!~ 人粪尿闷一年了可以直接上地里吗? 人尿可以浇花吗,有啥作用呢? 钉钉直播回放倍数算计算时长吗 西葫芦丝煎饼做法大全 西葫芦丝煎饼怎么做 新房验收哪些裂痕是属于正常的 我昨天晚上喝酒了,今天大姨妈来了有影响吗 电脑开机显示撤销对计算机的更改电脑显示正在撤销对计算机所做的更改... 美剧推荐|欧美高分青春校园剧TOP8,谁会不想要甜甜的爱情啊! 升学宴本人答谢词简短 《叛变者》王志文、王阳在线PK演技,观众却呼吁角色互换 鬼吹灯之昆仑神宫播出时间鬼吹灯之昆仑神宫什么时候上映 ipad具体型号是什么? 二胎刨产六个月后可以要三胎吗