VBA第十四期 一个有声音的进度条

用窗口制作的进度条虽然直观,但有一个缺点就是窗口必须设置为非模态,这样就导致如果想让程序后台运行的同时完成其它工作时程序会报错。下面的实例是在工作之余想到的一个有趣的尝试,就是用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等等溢出或者不符等提示。

你可能感兴趣的:(数据库,java,服务器)