2016-07-14 88 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

唯一的要求是由於客戶的要求,但欣賞這個建議,會很好的看​​看這個。 –