问题描述
我有一个循环次数未知的宏。次数根据参考文档中多个表中的总行数而变化,并且行数将因可能使用的参考文档而异。循环的相关代码片段如下:
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 (将#修改为@)