どこからでもこの問題に対する回答を見つけることができなかったので、皆さんが助けてくれることを願っています。私のExcelマクロは数回のデータを繰り返します。それは、ソースファイルをオートフィルタし、情報を取り出し、そのデータで動作し、約50回、すなわち1人につき1回再実行します。ここで私が意味する、すべての個々のサブメソッドがうまく動作し、かなり気に高速であるかのいくつかのコードがあります:ExcelがアクティブなウィンドウのときにExcelがゆっくり実行されています
For j = 1 To names.Count
'filter the source by name, generate sheet
FilterName names(j)
'prepare data with the necessary dates
FillMasterDates dates(), j
Dim i As Long
Dim ending As Long
ending = Sheets("Daten").Rows.End(xlDown).Row
Dim cellvalue As String
'check dates, etc
For i = 1 To ending
cellvalue = Sheets("Daten").Cells(i, 1)
If cellvalue = "" Then
Exit For
End If
ColorCell (i)
FilterDate CStr(dates(i)), names(j)
Next i
'user data has been successfully gathered, copy over to final sheet
FillColumns j
Next j
全体のコードは、私が約2000行を持っていると私が作成したことを考えると(実行するために約4〜秒かかります新しいシート50人用)、これは問題ありません。困ったことに、ExcelがApplication.ScreenUpdating = False
(この時点では以前のマクロであったが、この時点ではまだアクティブ)を使用していても、アクティブなウィンドウを維持すると、マクロを実行するのに必要な時間が25秒になります。同じ入力、同じ出力。つまり、マクロを実行するには、excel-macroのタブを実行するには約4-5秒必要です。マクロを実行しますが、Excelにとどまり、25秒待ってください。
私は試しましたが、Application.WindowState = Application.WindowState
、ActiveWindow.SmallScroll
、DoEvents
、Application.CalculateFull()
です。私は別の計算設定を試しましたが、実際にExcelに自然な数式計算を使用していません - ソースファイルが* .xlsファイルであり、最終出力がこの形式のままでなければならないためExcelをインターフェイスとして使用する必要があります。
感謝のためにコードスニペットを増やす必要がある場合は、尋ねてください。私は今、良い二日間のために困惑してきました。
お返事ありがとうございます。範囲を使用してオブジェクトを使用して私の仕事をするという私の現在の問題は、範囲内のオートフィルタデータを使いたいと思っていますが、これまでの試みは失敗しています。私はそれをすべてミリ秒以下にまで減らすことができると理解していますが、元の4秒は私の目的には十分であり、顧客にも満足しています。不規則な行動を単に止める他の方法はないのでしょうか?あなたが私の投稿を確認したら、警告を無効にするためのコード例をすでに試しました。 –
Haha oh神、ありがとうPaul!ちょっと変わったことですが、うまくいきます。おそらく、アクティブなウィンドウを現在開いている別のウィンドウに切り替えるための「劇的な」コマンドはないでしょう。たとえば、ALT + TABの仕組みを言います。 –
ありがとうございました!それは完全に動作します。私はALT TABを稼働させようとしていましたが、それはもっと細かいことです。あなたは大きな助けになりました –