宝哥软件园

excel图表使用VBA创建进度条

编辑:宝哥软件园 来源:互联网 时间:2021-09-22

当您的程序需要很长时间来执行时,有必要使用进度条来显示程序执行的状态。

进度条设计

打开VBE并插入用户表单。

1.在“属性”窗口中,命名用户表单urfProgress。

2.将其ShowModal属性设置为False,这样当用户表单打开时,程序可以继续运行。

3.将用户表单调整到合适的大小(高度110*宽度240)。

经过适当的设置后,表示进度条的当前用户表单如下图1所示。

图1

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

图2。

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

图3。

设置框架的属性。将其命名为fraProgress,将其Caption属性设置为空(即无文本),并将其SpecialEffect属性修改为“2-fmspecial effect dependent”。此时,表示进度条的用户表单如下图4所示。

图4

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

1.插入一个标签并将其放入新创建的框架中,调整大小使其与框架一致,如下图5所示。

图5

2.命名标签lblProgress。

3.将其标题属性修改为空白(即没有文本)。

4.将它的BackColor属性修改为您想要的颜色。

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

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

图6

编写程序

隐藏标题栏

在VBE中插入一个标准模块,并使用Windows API输入以下代码来隐藏用户表单的标题栏:

GWL公共警察局_STYLE=-16

公共常量WS_CAPTION=HC00000

#如果VBA7那么

公共声明函数

lib“user 32”别名“GetWindowLongA”(_

ByVal hWnd As Long,_

ByVal nIndex As Long) As Long

公共声明PtrSafe函数SetWindowLong _

lib“user 32”别名“SetWindowLongA”(_

ByVal hWnd As Long,_

ByVal nIndex As Long,_

ByVal dwNewLong As Long) As Long

公共声明函数DrawMenuBar_

lib“user 32”(_

一样长)

公共声明PtrSafe函数FindWindowA_

lib“user 32”(由VallpClassName作为字符串,_

ByVal lpWindowName As String)一样长

#否则

公共声明函数GetWindowLong _

lib“user 32”别名“GetWindowLongA”(_

ByVal hWnd As Long,_

ByVal nIndex As Long) As Long

公共声明函数SetWindowLong _

lib“user 32”别名“SetWindowLongA”(_

ByVal hWnd As Long,_

ByVal nIndex As Long,_

ByVal dwNewLong As Long) As Long

公共声明函数DrawMenuBar _

lib“user 32 ”(

一样长)

公共声明函数FindWindowA _

lib“user 32 ”(ByVal lpclass name As String,_

ByVal lpWindowName As String)一样长

#结束如果

子隐藏标题栏(作为对象)

昏暗的灯光一样长

将lFrmHdl调暗为长

lFrmHdl=FindWindowa(VBnullString,frm。标题)

lngWindow=GetWindowLong(lFrmHdl,GWL_STYLE)

lngWindow=lngWindow And(非WS_CAPTION)

调用SetWindowLong(lFrmHdl,GWL_STYLE,lngWindow)

调用DrawMenuBar(lFrmHdl)

末端接头

用户表单初始化

在用户表单urfProgress中,添加初始化事件代码:

私有子用户表单_初始化()

我。身高=我。高度10

隐藏标题栏。隐藏标题栏我

末端接头

显示进度栏。

本文的示例通过遍历工作表中所有使用过的行来更新进度条:

子演示进度()

模糊如龙

昏暗的灯光和长长的一样

将百分比调成单一

lngLastRow=范围(“A”行)。计数)。结束(xlUp)。排

进度条的宽度从0开始。

URF progress . lblpprogress . width=0

urfProgress。显示

对于i=1至lngLastRow

pct=i/lngLastRow

计算进度条的百分比并增加相应的宽度。

使用urfProgress。LBL选项。标题=行“处理内存”中的行“我”。

. lblpprogress . width=pct *(fraprogress . width)

以…结尾

DoEvents

你可以在这里插入真正想执行操作的程序。

如果进度完成,请卸载用户表单。

如果i=lngLastRow,则卸载曲面进度

接下来我

末端接头

运行程序后的效果如下图7所示。

图7

上面的例子表明,当程序中有一个循环时,进度条会在执行循环过程时显示。但是如果没有循环呢?您还可以模拟程序执行的进度:

子演示进度2()

开始显示进度条。

URF progress . lblpprogress . width=0

urfProgress。显示

模拟完成进度。

最近更新(0)

放置程序代码。

模拟完成进度。

最近数据(0.25)

放置程序代码。

模拟完成进度。

最近数据(0.5)

放置程序代码。

模拟完成进度。

最近数据(0.75)

放置程序代码。

模拟完成进度。

最近(1)

卸载表单,即关闭进度条。

卸载urfProgress

EndSub

子最近(单次完成)

使用urfProgress。LBL caption . caption=pct done * 100%完成。

. lblpprogress . width=pct done *(fraprogress . width)

以…结尾

DoEvents

末端接头

如果过程占用大量资源,您可能会发现进度条没有更新或显示为白色。在这种情况下,您可以在结束于之前添加代码:

urfProgress。重新油漆

强制VBA重新绘制进度条,以便每次更改用户表单时都会更新进度条。

更多资讯
游戏推荐
更多+