2016-07-14 66 views
0

我正在使用进度条向用户显示正在运行的宏的状态,但是因为宏删除了行,所以它向后运行For i = lastrow To 2 Step -1,这意味着我的进度条从100%运行到2 %。Excel VBA反向进度条

我只有计算了i,是否有可能使倒数时向后读取信息,所以对用户来说,它显然是在计数?

Sub update() 
Dim lastRow As Integer, email As String, pctCompl As Single 

lastRow = Sheets("Sheet1").Range("C5000").End(xlUp).Row 

For i = lastRow To 2 Step -1 
    email = Trim(Cells(i, 3).Value) 
    Set c = Sheets("Sheet3").Range("A:A").Find(email, LookIn:=xlValues) 
    If Not c Is Nothing Then 
     Cells(i, 1).EntireRow.Delete 
    End If 
    pctCompl = i 
    progress pctCompl 
Next i 

End Sub 

Sub progress(pctCompl As Single) 
UserForm1.Text.Caption = pctCompl & "% Completed" 
UserForm1.Bar.Width = pctCompl * 2 
DoEvents 
End Sub 

回答

1

更换

progress pctCompl 

progress Abs(Round(i/lastRow * 100, 0) - 100) + 1 

有没有必要设置i一个叫pctCompl变量 - 只是传递价值的过程。

+0

好了十分感谢,我没想到这个,但我现在得到“364%完成”(或最后一行数)。 –

+1

好点 - 我没有想过这个。我更新了代码来计算百分比。 –

2

为开箱答案你可能要考虑这样子:

Sub update()  
    With Worksheets("Sheet1") 
     With .Range("C2:C" & .Cells(.Rows.Count, 3).End(xlUp).Row) 
      With .offset(, .Parent.UsedRange.Columns.Count) 
       .FormulaR1C1 = "=iferror(match(RC3,Sheet3!C1,0),"""")" 
       .value = .value 
       .SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
       .Delete 
      End With 
     End With 
    End With 
end Sub 

这不应该要求在所有的任何进度条...

+0

唯一的要求是由于客户的要求,但欣赏这个建议,会很好的看​​看这个。 –