深圳office培训 深圳excel培训
深圳excel培训 深圳office培训
咨询服务
深圳office培训
深圳office培训
office培训
excel培训
ppt培训
vba培训
access培训
word培训
visio培训
project培训
outlook培训
数据库培训
深圳access培训
深圳sql培训
深圳office培训
 

在vba中进行进度条的制作


2016年8月11日 作者: 来源:

如果程序执行时间较长,使用进度条能让用户知道程序执行到何种程度,大约需等待多长时间,可以使界面显得友好。
方法1、使用进度条控件
使用窗体加进度条控件(ProgressBar)制作进度条是最常用的方法。
在VBE窗口中单击菜单“插入”→“用户窗体”,在窗体上添加一个进度条控件,调整为合适的大小。
在工作表中添加一个命令按钮,双击后写入下面的代码。
#001  Private Sub CommandButton1_Click()
#002      Dim i As Integer
#003      UserForm1.Show 0
#004      With UserForm1.ProgressBar1
#005          .Min = 1
#006          .Max = 10000
#007          .Scrolling = 0
#008          For i = 1 To 10000
#009              Cells(i, 1) = i
#010              .Value = i
#011              UserForm1.Caption = "正在运行,已完成" & i / 100 & "%,请稍候!"
#012          Next
#013      End With
#014      Unload UserForm1
#015      Columns(1).ClearContents
#016  End Sub
代码解析:
工作表中命令按钮的单击事件,在给工作表A1到A10000单元格赋值的同时使用进度条显示其运行速度。
第3行代码,使用Show方法显示进度条控件所在的窗体,并且设置为无模式显示。
第5、6行代码,设置进度条控件的最小值和最大值,应与第8行代码中的循环计数器的start参数和End参数相一致。
第7行代码,设置进度条控件显示为有间隔的。如果将Scrolling属性设置为1则显示为无间隔的。
第9行代码,在单元格中进行无意义的填充数据以演示进度条。在实际应用中可以将进度条嵌入到程序的循环中。
第11行代码,在窗体的标题栏中显示已完成的百分比。
第14行代码,使用Unload 语句卸载窗体。
Unload 语句从内存中删除一个对象,语法如下:
Unload object
参数object参数是必需的,一个有效的对象。
第19行代码,清空A列填充的数据。
单击工作表中的命令按钮,填充单元格并显示进度条。
 

方法2、使用标签控件
在窗体中使用标签可以制作双色的进度条。
步骤1,在VBE窗口中单击菜单“插入”→“用户窗体”,在窗体上添加一个框架控件,在框架控件中添加两个标签控件。
步骤2,在控件的属性窗口中将框架的BackColor 属性设为&H000000FF&,使框架的背景色为红色。将标签1的BackColor属性设为&H0000C000&,使标签1的背景色为绿色。将标签2的BackStyle属性设为fmBackStyleTransparent,使标签2的背景为透明,并把它们的Caption属性全部设置为空白。
步骤3,将窗体和控件调整为合适的大小。
步骤4,在VBE中双击窗体,写入下面的代码。
#001  Private Declare Function DrawMenuBar Lib "user32" (ByVal Hwnd As Long) As Long
#002  Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As Long
#003  Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
#004  Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#005  Private Const GWL_STYLE As Long = (-16)
#006  Private Const GWL_EXSTYLE = (-20)
#007  Private Const WS_CAPTION As Long = &HC00000
#008  Private Sub UserForm_Initialize()
#009      Dim IStyle As Long
#010      Dim Hwnd As Long
#011      If Val(Application.Version) < 9 Then
#012          Hwnd = FindWindow("ThunderXFrame", Me.Caption)
#013      Else
#014          Hwnd = FindWindow("ThunderDFrame", Me.Caption)
#015      End If
#016      IStyle = GetWindowLong(Hwnd, GWL_STYLE)
#017      IStyle = IStyle And Not WS_CAPTION
#018      SetWindowLong Hwnd, GWL_STYLE, IStyle
#019      DrawMenuBar Hwnd
#020      UserForm1.Height = 28
#021  End Sub
代码解析:
窗体的初始化事件,在窗体加载时使用API函数去除其标题栏。
第1行到第7行代码,API函数的声明。
第11行到第15行代码,获取窗口句柄。
第16行到第19行代码,去除窗体标题栏。
第20行代码,设置窗体的高度。
步骤5,在工作表中添加一个命令按钮,双击后写入下面的代码。
#001  Private Sub CommandButton1_Click()
#002      Dim n As Integer
#003      Dim i As Integer
#004      n = 10000
#005      With UserForm1
#006          .Show 0
#007          For i = 1 To n
#008              Cells(i, 1) = i
#009              .Label1.Width = i / n * .Frame1.Width
#010              .Label2.Caption = "已完成" & Round(i / n * 100, 0) & "%"
#011              .Label2.Left = .Label1.Width - 50
#012              DoEvents
#013          Next
#014      End With
#015      Unload UserForm1
#016      Range("A1:A" & n).ClearContents
#017  End Sub
代码解析:
工作表中命令按钮的单击事件,在给工作表A1到A10000单元格赋值的同时使用进度条显示其运行速度。
第4行代码,设置循环最大值,可根据实际需要设置。
第6行代码,使用Show方法显示窗体,并且设置为无模式的。
第8行代码,在单元格中进行无意义的填充数据以演示进度条。
第9行代码,根据程序运行程度动态设置标签1的宽度,使之达到进度条的效果。
第10行代码,标签2显示已完成百分比。
第11行代码,根据标签1的宽度动态设置标签2的Left属性,使已完成百分比跟随标签1移动。
第12行代码,使用DoEvents函数转让控制权。DoEvents函数将控制权传给操作系统。当操作系统处理完队列中的事件,并且在 SendKeys队列中的所有键也都已送出之后,返回控制权。如果不使用DoEvents函数转让控制权,进度条不能正常显示。
第15行代码,使用Unload 语句卸载窗体。
单击工作表中的命令按钮,填充单元格并显示进度条。


阅读:2251 上一则:vba中的非模式窗体 下一则:TreeView控件的应用

返回前页 返回顶部
温馨提示:本中心是深圳较为专业office培训机构、咨询及报名请先预约,电话:0755-82124110。
深圳地址:深圳红荔路四川大厦1109B-1110(3号龙岗线通新岭地铁站A出口10米)
热线:0755-82124110(福田、南山、宝安) 0755-22205758(罗湖、龙岗、龙华) 13510024571(东莞、惠州、珠海、广州)
北京地址:北京清华大学华业大厦三区三楼 版权所有:深圳万博计算机教育 粤ICP备11006947号-1
 
深圳信息系统项目管理师培训
深圳信息系统项目管理师培训 欢迎咨询!
您好!请点击这里咨询万博教育
深圳万博吴老师
您好!请点击这里咨询万博教育
深圳万博史老师
 
深圳信息系统项目管理师培训
深圳信息系统项目管理师培训