2016-09-28 27 views
0

データのトリミングを実行するマクロコードがあります。VBAループのExcelステータスバーを更新する

Sub StatusBarExample() 
Application.ScreenUpdating = False 
Application.DisplayStatusBar = True 
Application.StatusBar = "Trimming..." 
Dim x As Long 
x = 1 
Do While Cells(x, 1) <> "" 
Cells(x, 2).Select 
ActiveCell.FormulaR1C1 = "=trim(RC[-1])" 
x = x + 1 
Loop 
Application.Wait Now + TimeValue("00:00:02") 
Application.StatusBar = False 
End Sub 

データの数は常に変化し、私はDo Whileループを使用する理由である:以下は私のコードです。このコードでは、進行状況をパーセンテージで知らなくても、「トリミング」というメッセージしか表示されません。誰も私がこのコードを改善するのを助けることができますか?

+0

「Application.StatusBar」を「x」で更新する方法をご覧ください。 –

+3

ループを忘れて、 '.range(.cells(1,1)、.cells(.rows.count、1).end(xlup))。offset(0,1).FormulaR1C1 =" = trim -1]) "'私がインクルードしたコードは[With ... End Withステートメント]で定義されたワークシートを参照しています(https://msdn.microsoft.com/en-us/library/wc500chb.aspx )。 – Jeeped

答えて

1

私はこのアプローチを採用します。私はより良いforループが好きで、これはステータスバーに%completeを表示します。

Sub StatusBarExample() 
Application.ScreenUpdating = False 
Application.DisplayStatusBar = True 
Application.StatusBar = "Trimming..." 
Dim x As Long 
Dim lRow as Long 
Dim prePct as Single, newPct as Single 

newPct = 0 
prePct = 0 
With ThisWorkbook.Sheets("Sheet Name Goes Here") 
    lRow = .Range("A" & .Rows.Count).End(xlUp).Row 

    For x = 1 to lRow 
     .Cells(x,2).FormulaR1C1 = "=trim(RC[-1])" 
     newPct = x/lRow 

     If newPct > prePct + .01 
     DoEvents 
     prePct = newPct 
     End If 

     Application.StatusBar = "Trimming..." & Format(x/lRow,"0.00%") & " Complete" 
    Next x 
Application.StatusBar = False 
Application.ScreeUpdating = True 
End Sub 

ありがとうございました。私はいくつかの変更を加えました。 If newPct > prePct + .01行では、データの量に応じて.01を別のものに変更する必要があります。

+0

ステータスバーのテキストは、同じものを書き直すと多く点滅します。私は通常、新しいフォーマットされた値を保存し、それが実際のものと異なる場合にのみ書きます。 – Jeeped

+1

私はいくつかの変更を提案します:1. ScreenUpdatingをリセットする必要があります。 2.頻繁にDoEventsが必要な場合や、多数のセルを処理している場合、StatusBar/Excelは更新を表示しません。 'Right(x、3)=" 000 "Then DoEvents'を試してみてください。(私は右が3桁未満の数字を壊さないと思います) – puzzlepiece87

+0

ありがとう!私はこれについて質問があります: lRow( "A"と.Count).End(xlUp).Row 最初の行がA5の場合、それは次のようになります。 lRow =。範囲( "A5"&Rows.Count)。終了(xlUp)。ロー? –

関連する問題