4

私はvbaが初めてです-文字通り3日間しかやっていません。

とにかく、ユーザーからデータを取得するフォームがいくつかあり、それらを別の「ログ」シートの一番上の行に書き込みます。私はこれを使用しています:

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 秒間フリックしてから、書き込むのに時間がかかることです。

ログの一番上の行に書き込んでいる理由は、varToken の 100 個の vlookups (参照するトークンが 100 個あります) を使用してフロント シートに要約されたデータがあり、最初の (つまり一番上の) エントリを見つけるためです。ログシートで。

より迅速にログ シートの最後に書き込むこともできますが、100 個の vlookup を置き換えるコードが必要になります。このコードは、潜在的に数千行から数千行にあるトークンの最後の言及を検索し、迅速に実行されます。

前もって感謝します!

4

1 に答える 1

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
于 2012-04-25T14:32:03.243 に答える