`
xieyunbiao
  • 浏览: 37001 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

VBA进度条的制作

阅读更多

    用VBA做Excel的大量数据处理时,程序要运行很长时间,当VBA程序运行后台运行时Excel是不允许操作的,这样Excel长时间的被后台运行的VBA占用,会给用户一直MicroSoft Excel程序死掉了的感觉。这样让用户很是头疼,不知道怎么办了?如果强行杀掉MicroSoft Excel进程,又心疼没有保存的哪些保存的Excel操作;如果等待又不知道MicroSoft Excel是不是真的死掉了,不知道要等待多长时间。所以VBA做Excel的大量数据处理时给用户一个表示数据处理完成度的进度条是很有必要的。

    可能在VB.net等其它开发语言里直接有进度条的控件,使用起来非常方便。在VBA里我们只能自己做一个了,不过也很简单,操作的方法如下:

    1.首先插入一个用户窗体,然后在窗体中插入三个Label,其属性设置请参见图片

VBA进度条的制作

VBA进度条的制作

VBA进度条的制作

VBA进度条的制作

     2.窗体内部不用写任何VBA代码,只要我们想显示进度条时,先show进度条窗体,然后不断的改变Label1的长度和Label2的数值就OK了。代码参见以下

Function progressBarShow(n As Integer, total As Integer)
On Error GoTo err
    With ProgressBar
        .Show 0
        .Label1.Width = Int(n / total * 400)
        .Label2.Caption = CStr(Int(n / total * 100)) + "%"
        DoEvents
    End With
    If (n = total) Then ProgressBar.Hide
thisEnd:
    Exit Function
err:
    MsgBox (err.Description)
End Function

    注意这里边一个起到关键作用的语句就是DoEvents函数,没有这个函数进度条就起不到作用了。下面我们了解一下这个函数。

    DoEvents 函数功能:转让控制权,以便让操作系统处理其它的事件。
 
  DoEvents 函数会返回一个 Integer,DoEvents 返回 0。
 
  DoEvents 会将控制权传给操作系统。当操作系统处理完队列中的事件,并且在 SendKeys 队列中的所有键也都已送出之后,返回控制权。
 
  说得简单一点,DoEvents把控制权转交给操作系统,让word,excel,powerpoint能够处理其它的操作。否则,屏幕将处于黑屏状态而不能进行相应的日常化操作。

 

    只有使用这个DoEvents才能在不影响VBA处理数据的操作又能调用进度条窗体给用户显示数据处理进度。

   

    做了一个简单的VBA例子,用进度条显示创建100excel新文件的进度,第一次写博客,还没找到上传附件的办法,等找到了我再给大家上传源代码,先给大家来个实力图吧!

VBA进度条的制作

 代码实例地址:http://vdisk.weibo.com/s/j8JCR/1354066736

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics