微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

步数未知的 Word VBA 进度条

如何解决步数未知的 Word VBA 进度条

我有一个循环次数未知的宏。次数根据参考文档中多个表中的总行数而变化,并且行数将因可能使用的参考文档而异。循环的相关代码片段如下:

For Each oRow In oTbl.Rows
    p = p + 1
    Helper.ProgressIndicator_Code (p)
    strPhrase = Split(Trim(oRow.Range.Cells(1).Range.Text),vbCr)(0)
    strRule = Split(Trim(oRow.Cells(2).Range.Text),vbCr)(0)
    If strPhrase <> "" Then
      If Not strStartWord = vbNullString Then
        'Process defined sections
        arrEndWords = Split(strEndWord,"|")
        For lngIndex = 0 To UBound(arrEndWords)
          Set oRng = GetDocRange(strStartWord,arrEndWords(lngIndex))
          If Not oRng Is nothing Then Exit For
        Next lngIndex
      Else
        'Process whole document
        Set oRng = m_odocCurrent.Range
      End If
      If Not oRng Is nothing Then
        Set oRngScope = oRng.Duplicate
        With oRng.Find
          .Text = strPhrase
          do while .Execute
            If Not oRng.InRange(oRngScope) Then Exit For
            oRng.HighlightColorIndex = wdTurquoise
                        If strRule <> "" Then
              Set oComment = m_odocCurrent.Comments.Add(Range:=oRng,Text:=strUsr & ": " & strRule)
              oComment.Author = UCase("WordCheck")
              oComment.Initial = UCase("WC")
            End If
          Loop
        End With
      End If
    End If
  Next oRow

进度条是一个经典的进度条,根据上面代码中更新的 p 值,使用以下代码更新标签字段宽度:

Sub progress(pctCompl As Integer)

  ProgressIndicator.Text.Caption = pctCompl & "% Completed"
  ProgressIndicator.Bar.Width = pctCompl * 2

  DoEvents

End Sub

这是我的问题:p 的值因使用的参考文档而异,因此我的进度条在 VBA 宏的处理方面甚至从未大致准确。进度条不一定要准确,只要关闭并指示正在取得进展并且没有任何挂起。

我不是在寻找书面代码,只是非常感谢有关使我的进度条更准确以便我可以学习的方法的建议或建议(例如,我只是为三个不同的参考文档运行了宏 -一个给了我 25%,一个给了 44%,一个给了 82%;完成时没有一个显示接近 100%)。基本上我需要将 i 除以一个未知数来得到我的百分比,这显然是不可能的,所以需要一些函数来进行近似。

编辑:基于@macropod 建议的新代码

Dim strCheckDoc As String,docRef As Document,projectPath As String,_
  j As Integer,i As Integer,k As Integer,oNumRows as Long

j = 1

For i = 0 To UBound(strUsr)
  strCheckDoc = [path to reference document unique to each strUsr]
  Set docRef = Documents.Open(strCheckDoc,ReadOnly:=True,Visible:=False)
  
 For k = 1 To docRef.Tables.Count
   oNumRows = oNumRows + docRef.Tables(i).Rows.Count
 Next k
Next i

那么更新进度条的代码是:

Dim pctCompl As Single

pctCompl = Round((p / oNumRows) * 100)
ProgressIndicator.Text.Caption = pctCompl & "% Completed"
ProgressIndicator.Bar.Width = pctCompl * 2

DoEvents

进度条现在在完成时达到 64%(即它应该是 100%)。我还在研究一种方法,使 oNumRows 仅在第一列中有内容时才计算一行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。