前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA实战技巧30:创建自定义的进度条2

VBA实战技巧30:创建自定义的进度条2

作者头像
fanjy
发布2021-08-31 17:33:17
1.1K0
发布2021-08-31 17:33:17
举报
文章被收录于专栏:完美Excel完美Excel

有创意的进度条

采用相反的方式来显示进度,将使用标签“缩小”而不是“增长”。诀窍是我们的标签不是进度的指示器。相反,有一个指示进度的静态图像,而标签将充当静态图形隐藏部分的遮罩,如下图5所示。

图5

通过将标签着色为与背景相同的颜色并将标签的位置放置在图像之上,可以在减小标签的大小时显示图像的一部分。当我们“缩小”标签时,它会给我们一种“增长”图像的错觉,如下图6所示。

图6

大多数情况下,本示例的代码与上一示例是相同的,主要区别在于滚动条/遮罩和百分比显示。

百分比显示

添加一个文本框对象(如下图7所示)并更改其标题(Caption)属性,而不是插入框架对象并更改标题属性。

图7

其灰色背景是一个插入的Image对象,它指向一个带有灰色边框的简单图像。

进度条(静态图像)

绿色的“Excel”进度条是一个绿色矩形的静态图像,带有重复四次的Excel图标,如下图8所示。

图8

进度条(“缩小”遮罩)

与第一个示例相比,“缩小”的标签对象在操作上有两个主要区别。

  • Width属性的计算方法是将Pct乘以218(最大宽度)并从218中减少。例如,如果Pct为0.5,则宽度为109,原218的一半。
  • 将计算标签的左侧而不是将Left属性固定到设置位置。逻辑是从230(标签的最右侧)中减去计算出的Width。例如,如果Pct为0.5,则计算出的Width为 109,则Left属性计算结果为121。

注意:这些结果代表像素数。109代表像素宽度,121表示距用户窗体左边缘121个像素。根据用户窗体大小,可能需要试验这些值,可能需要进行一些实验才能获得完美的外观。

完整的代码如下:

1.标准模块中的代码

Sub GetMyForm_v2()

Load UserForm_v2

With UserForm_v2

.StartUpPosition = 0

.Left= Application.Left + (0.5 * Application.Width) - (0.5 * .Width)

.Top= Application.Top + (0.5 * Application.Height) - (0.5 * .Height)

.Show

End With

End Sub

2.用户窗体模块中的代码

Private Sub UserForm_Activate()

Dim startrow As Integer

Dim endrow As Integer

Dim i As Integer

Dim myScrollTest As Object

Set mainbook = ThisWorkbook

Application.ScreenUpdating = False

Application.DisplayAlerts = False

Set myScrollTest = Worksheets("ScrollTest_v2")

mylabel =Worksheets("ScrollTest_v2").Range("A2").Value

With myScrollTest

'开始位置

startrow = .Range("A1").Row + 1

'结束位置

endrow = .Range("A1").End(xlDown).Row

If .Range("A2").Value = "" Then

MsgBox "请从第2行开始粘贴你的实体代码."

Exit Sub

EndIf

End With

'开始循环

For i =startrow To endrow

Pct =(i - startrow + 1) / (endrow - startrow + 1)

Call UpdateProgress(Pct)

'这是工作簿执行许多需要一些时间的事情的地方

startTime = Timer ' 捕获当前时间

Do

Loop Until Timer - startTime >= 0.1 '1/10 秒后前进

'这是工作簿完成重复工作的地方

Next i

Unload UserForm_v2

myScrollTest.Select

MsgBox"生成报告已结束."& vbLf & vbLf & "请从打印机获取你的报告",vbInformation

Application.ScreenUpdating = True

Application.DisplayAlerts = True

End Sub

Sub UpdateProgress(Pct)

With UserForm_v2

.Complete.Caption = Format(Pct, "0%") '以数字形式显示给用户的百分比

.LabelProgress.Width = 218 - Pct * 218 ' 缩短遮罩

.LabelProgress.Left = 218 - .LabelProgress.Width + 12 '重新定位遮罩

.Repaint

End With

DoEvents

End Sub

注:本文学习整理自www.xelplus.com,供有兴趣的朋友参考。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档