用窗口制作的进度条虽然直观,但有一个缺点就是窗口必须设置为非模态,这样就导致如果想让程序后台运行的同时完成其它工作时程序会报错。下面的实例是在工作之余想到的一个有趣的尝试,就是用Application.Speech.Speak这个调用嵌入到循环里面,同时通过状态栏显示完成情况,两者结合就可以达到进度条效果。
Private Sub CommandButton3_Click()
Dim rw, cl, rw1, dwl, dwh
Dim czmbh, czmbl, i, ii, iii, mylist(1 To 200)
dwh = 0
Application.StatusBar = False
Sheets("全部").Activate
Sheets("全部").Range("a1").Select
cl = ActiveCell.CurrentRegion.Columns.Count
rw = ActiveCell.CurrentRegion.Rows.Count
Sheets("表1").Select
Sheets("表1").Range("a2").Select
rw1 = ActiveCell.CurrentRegion.Rows.Count
iii = 1
For i = 1 To rw1
addbz = 1
For ii = 1 To iii
If Sheets("表1").Range("b" & i) = mylist(ii) Then addbz = 0
Next
If addbz Then
mylist(iii) = Sheets("表1").Range("b" & i)
iii = iii + 1
End If
Application.Speech.Speak i
Next
Sheets("全部").Select
For i = 1 To 200
If mylist(i) <> "" Then
For ii = 1 To cl
If mylist(i) = Sheets("全部").Cells(1, ii) Then
Sheets("全部").Cells(1, ii).Select
Selection.EntireColumn.Delete
End If
Next
End If
Next
Sheets("全部").Activate
Sheets("全部").Range("a1").Select
cl = ActiveCell.CurrentRegion.Columns.Count
rw = ActiveCell.CurrentRegion.Rows.Count
For i = 1 To rw1
czmbh = Sheets("表1").Range("b" & i)
czmbl = Sheets("表1").Range("c" & i)
dwl = 0
Application.Speech.Speak "滴"
For ii = 1 To cl
If czmbh = Sheets("全部").Cells(1, ii) Then
dwl = ii
End If
Next
If dwl = 0 Then
cl = cl + 1
'Sheets("全部").Select
Sheets("全部").Cells(1, cl) = czmbh
dwl = cl
End If
For iii = 1 To rw
If czmbl = Sheets("全部").Range("a" & iii) Then
dwh = iii
'Sheets("全部").Select
Sheets("全部").Cells(dwh, dwl) = 1
End If
Next
Next
Application.StatusBar = "表1更新完成"
Endsub
Application.StatusBar = False用于清除以前在状态栏显示的内容,假如我们在以前的程序中用了Application.StatusBar = "表2更新完成",如果不清除就会在当前语句Application.StatusBar = "表1更新完成"运行前一直显示"表2更新完成",造成跟踪错觉。
上面的Application.Speech.Speak i可以跟踪循环的变量数字,对于初学者用于程序调试很有用。
Application.Speech.Speak "滴"就是简单的发出滴的声音,有兴趣的朋友可以改进成唱歌和念诗。
最后还有一点想说明一下。有很多人不明白就一个简单的窗口模式的转变怎么回影响原本可以正常执行的程序报错,原因是当窗口设置为非模态时,WPS是允许我们切换工作表并同时可以对工作表进行操作,如果我们的程序中用到了诸如ActiveCell此类属性,当我们在程序运行时点击了其它表格就等于改变了ActiveCell当前工作表格,然后导致读取数据错误出现401等等溢出或者不符等提示。