电脑教程
位置:首页>> 电脑教程>> office教程>> excel图表使用VBA创建进度条

excel图表使用VBA创建进度条

  发布时间:2022-09-05 20:01:13 

标签:excel图表制作,excel常用函数,excel数据透视表,Excel教程

当你的程序执行时间较长时,使用一个进度条来展示程序执行的状态是非常必要的。

进度条设计

打开VBE,插入一个用户窗体。

1.在属性窗口中,将该用户窗体命名为urfProgress。

2.设置其ShowModal属性为False,这样在该用户窗体处于打开状态时仍能继续运行程序。

3.调整该用户窗体为合适的大小(高110*宽240)。

进行适当设置后,目前表示进度条的用户窗体如下图1所示。

excel图表使用VBA创建进度条

图1

在用户窗体中插入一个标签控件,用于显示指示程序状态的文本。在属性窗口将其命名为lblCaption,调整该标签的大小以便有足够的空间来容纳将要显示的文本,这里设置其Width属性为174,设置其Caption属性为空(即没有文本)。此时,表示进度条的用户窗体如下图2所示。

excel图表使用VBA创建进度条

图2

接下来,在用户窗体中插入一个框架控件。使该框架在水平和垂直方向上大致居于用户窗体中心,并位于前面添加的标签下方,如下图3所示。

excel图表使用VBA创建进度条

图3

设置框架的属性。将其命名为fraProgress,设置其Caption属性为空(即没有文本),修改其SpecialEffect属性为“2-fmSpecialEffectSunken”。此时,表示进度条的用户窗体如下图4所示。

excel图表使用VBA创建进度条

图4

随后,再插入一个标签。该标签中不会显示任何文本,但是随着程序的运行,该标签长度会不断增加来填充刚刚创建的框架。

1.插入一个标签并放置在刚创建的框架里面,调整尺寸使其与框架重合,如下图5所示。

excel图表使用VBA创建进度条

图5

2.将该标签命名为lblProgress。

3.修改其Caption属性为空(即没有文本)。

4.修改其BackColor属性为你想要的颜色。

5.修改其SpecialEffect属性为“1-fmSpecialEffectRaised”。

此时,表示进度条的用户窗体如下图6所示。

excel图表使用VBA创建进度条

图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所示。

excel图表使用VBA创建进度条

图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重新绘制进度条,这样在每次更改用户窗体时都会更新。

0
投稿

猜你喜欢

  • 从会用电脑开始,Microsoft Office Word就是我们最常用的软件。靠着它,我们写论文、写方案、写情书、写故事…但是,你真的懂W
  • 害人之心不可有,防人之心不可无。任何时候,必要的保密工作还是要做的。对于Word而言,我们可以对文档进行加密,完了之后只有知道正确的密码才能
  • excel表格中怎么绘制一条简笔画小鱼?excel中可以随意绘制图形,需要使用vba编程来绘制,下面我们就来看看excel表格绘制一条简笔画
  • 如果有网友是需要每天都频繁的使用word,并经常需要执行“打开”命令,那文章介绍了一种更加方便快捷的办法,宏命令。笔者每天都要使用Word,
  • 现在有很多有用户都在使用Word来编辑各种文档,而其中一部分用户在打开一些Word文档的时候出现了文字乱码的情况,那么遇到这种问题时应该怎么
  • Word 2013功能区和选项卡的基础知识!所有Office 2013应用程序(包括Word 2013)都有一个通用的导航系统,称为功能区,
  • 在过了保修期后摔碎了iPhone屏幕,修不修?不修吧,破碎的玻璃、若隐若现的屏幕白线一直在挑战着你的忍耐上限。修吧,昂贵的 2559 元保外
  • ①启动Excel2003,单击菜单栏--插入--图片--来自文件。    ②将图片插入表格中,可以看到图片周围有白色的区
  • 现在,很多人都在使用MindMapper思维导图这个软件。这是一个非常好用的办公软件。我们可以将其他程序中的内容导导入到MindMapper
  • 很多小朋友在使用录制屏幕功能时会发现,他们并没有一起录制声音,那么我们如何录制声音呢?今天,我们给大家带来了录音的操作方法,让我们来看看。w
  • 在excel中,有一个叫做VBA的宏功能,通过这个功能,我们能够实现很多数据库中才能实现的功能。如果大家觉得我们平常看见的登录数据的验证窗口
  • office2003怎么设置R1C1样式?office2003中可以设置R1C1样式,但是很多朋友不知道该怎么设置呢?下面我们就来看看详细的
  • Excel2007基础教程:通过搜索选择单元格选择单元格的另一种方式是使用Excel 的"开始"->"编
  • 在 AirPods 上使用 Siri 信息播报功能· 打开 “设置” App。· 轻点 “通知”,然后轻点 “Siri 信息播报”
  • Shift键在Excel里有这样的妙处:在按下Shift键的同时点击“编辑”菜单,原来的复制和粘贴选项就会变成“复制图片”和“粘贴图片”。利
  • excel怎么借用VBA绘制小卡车?excel中直接绘制图形很困难,我们要借助vba窗体,下面我们就来看看详细的画法,很简单,需要的朋友可以
  • 在我们日常使用的win10系统计算机中,应该会有很多用户遇到系统更新错误,那么win10如何启用自动删除问题更新呢?下面的小编将为您带来wi
  • win10系统由于其稳定性和良好的兼容性一直受到大家的喜爱,但是在使用win10u盘装系统的时候还是使用win10u系统呢?今日小编带着wi
  • word设置文档抬头每页都有的方法:1、在word菜单栏点击“插入”。2、在下方点击“页眉和页脚”选项。3、单击“页眉”选项。4、弹出页面,
  • 妙用Word2007做强大的桌面搜索.昨天到华夏大盘精选好的一个PPT现在找不到了,那可是明天单位Office 2007培训课上要用的呀,任
手机版 电脑教程 asp之家 www.aspxhome.com