2012-04-25 25 views
4

私はvbaを初めて使用しています - 私は文字通り3日間しか行っていません。Excel 2003で新しい行を挿入するvba

とにかく、私はいくつかのデータをユーザーから取得して、別々の 'ログ'シートの一番上の行に書きます。私はこれを使用しています:

With Worksheets("Log") 
    .Unprotect 
    .Range("A2").EntireRow.Insert Shift:=xlDown 
    .Range("A2") = varToken 
    .Range("B2") = varAction 
    .Range("C2") = varLocation 
    .Range("D2") = varTracking 
    .Range("E2") = Date 
    .Range("F2") = Time 
    .Range("G2") = varPerson 
    .Range("H2") = varOverride 
    .Protect 
End With 

問題は、それはログシートに0.5秒間フリックし、次に書き込みに時間がかかります。

ログの一番上の行に書き込む理由は、フロントシートに100個のVlookup(varTokenの100個のトークンがあります)を使用してデータを要約しています。すなわち、ログシート内のトップエントリ)。

ログシートの一番下に書き込むことができますが、それよりも速い場合は、100個のVlookupを置き換えるコードが必要になります。すぐに実行!

ありがとうございます!

答えて

10

Vlookupsは、セルに書き込むたびに再計算されるためプロセスが遅くなると思います。試してください

With Application 
    .ScreenUpdating = False 
    .Calculation = xlCalculationManual 
End With 

With Worksheets("Log") 
    .Unprotect 
    .Range("A2").EntireRow.Insert Shift:=xlDown 
    .Range("A2") = varToken 
    .Range("B2") = varAction 
    .Range("C2") = varLocation 
    .Range("D2") = varTracking 
    .Range("E2") = Date 
    .Range("F2") = Time 
    .Range("G2") = varPerson 
    .Range("H2") = varOverride 
    .Protect 
End With 

With Application 
    .ScreenUpdating = True 
    .Calculation = xlCalculationAutomatic 
End With 
+2

これは失敗する可能性は低いですが、アプリケーション設定を変更するときにエラーハンドラを使用することをお勧めします。 (はい私はあなたが知っていると知っている!) – assylias

+0

+1 @assylias:うん、それはエラーを常に処理するための良い点です。 :) –

+0

華麗な - ありがとう!それがソートされました。エラーハンドラについてassilliasが何を意味するのか尋ねることはできますか? –

関連する問題