|
本帖最后由 mythqiu 于 2018-7-27 11:20 编辑
- '调用方法:
- for i=1 to ir
- '其他程序
- Call YanShi(60, i, ir, 500, ",King WPS")
- 'Call YanShi(0, i, ir , 100, ",MicroSoft")
- next
复制代码
经过测试,office设置100的倍数调用,5000条数据大约影响0.5秒,如果每条都调用100设置为1,时间增加太多
wps 60毫秒暂停一下,500的倍数调用,大概影响1秒多.500调小,时间会增加
- ''''''''''''''''''''''
- '自定义 状态栏 进度显示 ■□●○★☆▲△▼▽◆◇※∷┇┆╋╬┋┊Θο
- '在状态栏显示 调用方式如下
- 'Application.StatusBar = GetProgress(n, m,msg)
- 'EH 论坛 coby001 改进版本 http://club.excelhome.net/forum.php?mod=viewthread&tid=1286008
- '原版 http://www.cnblogs.com/gxlxzys/archive/2010/10/16/1852967.html
- '''''''''''''''''''''
- Function GetProgress(curValue, maxValue, info) As String
- Dim sgp$(1 To 8), igp&, jgp&
- Const Lgp& = 20
- If curValue > maxValue Then curValue = maxValue
- igp = maxValue \ Lgp
- jgp = curValue \ igp
- sgp(1) = String(jgp, "■")
- sgp(2) = String(Lgp - jgp, "□")
- sgp(3) = CInt(curValue * 100 / maxValue)
- sgp(4) = "% 计算行:"
- sgp(5) = curValue
- sgp(6) = "/"
- sgp(7) = maxValue
- sgp(8) = info
- GetProgress = Join(sgp, "")
- Erase sgp
- End Function
复制代码- '''''''''''''''''''''''''''''
- '延时程序,用于某些版本Excel不刷新状态栏
- '为了不耽误太多时间,自定义延时时间(毫秒),循环到多少式才延时延时
- 'Call YanShi(100, i,ir, 200,"信息") 含义是延时100毫秒,i每到200的倍数才延时. i,ir为 for....next中的计数变量
- '每NumPer才暂停,这个进度在计算很短的地方没必要使用,只会增加无谓的时间
- ''''''''''''''''''''''''''''
- Sub YanShi(T%, CurForNum&, AllForNum&, NumPer%, Strv$)
- If CurForNum = 1 Then
- Application.StatusBar = GetProgress(CurForNum, AllForNum, Strv)
- ElseIf CurForNum Mod NumPer = 0 Then
- '下面是为了解决wps不显示状态的问题,T需要设置一个毫秒数量建议50毫秒,Microsoft的设置为0
- If T > 0 Then
- Dim Time8 As Long
- Time8 = timeGetTime
- Application.SendKeys "{LEFT}" '发送一个键值,任何都可,建议←键,不产生输入,移动到左边就不在影响
- Application.ScreenUpdating = True '开启屏幕刷新
- Do
- DoEvents
- Loop While timeGetTime - Time8 < T '暂停T毫秒,写入状态进度
- End If
- Application.StatusBar = GetProgress(CurForNum, AllForNum, Strv)
- If T > 0 Then Application.ScreenUpdating = False '关闭
- End If
- End Sub
复制代码 |
|