• 締切済み

スクロール停止を繰り返すマクロについて

2500行ぐらいあるExcel データを 21行置きに10秒ぐらい閲覧するマクロを作成したのですが、5回に3回ぐらい 988行ぐらいのところで、停止してしまいます。プログラムのどこがいけないのでしょうか? Option Explicit 'Sleepを使う Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) Sub scroll()  ’準備のため20秒ストップを入れる ActiveSheet.Range("A1").Select Sleep 20000  ‘最初の8行目で一旦停止 ActiveWindow.SmallScroll Down:=8 Sleep 10000  ’ここからスタート Dim i As Long For i = 1 To 121 ActiveWindow.SmallScroll Down:=21 Sleep 10000 Next i End Sub

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

下記を感じた次第。 タイマー設定など、難しいことをやらなくても、 当シートがSheet1として、開発ーVisualBasic-VBAProject その中のシートSheet1を選び、 その(Worksheetの)クリックイベントで Private Sub Worksheet_SelectionChange(ByVal Target As Range) ActiveWindow.SmallScroll Down:=21 End Sub を設定しておく。 これでこのシート上でクリックすると21行下のデータが表示される。 クリックする時間間隔は定めはなく、このほうがよい場合もあるようにも思う。 この1クリックも惜しいなら、話は別ですが。 また、クリックイベントを他の目的のために使っていない場合の話。

  • kzr260v2
  • ベストアンサー率48% (854/1778)
回答No.1

ループしているかイミディエイトウィンドウにiを出力すると良いです。以下のような記述例になります。 Debug.Print Format(i,"000") ループが継続してるならActiveWindowが変わってしまった可能性や、DoEventsをかまさないと上手く動作できないのかもしれないです。(DoEventsは実行速度が遅くなることがありますから、毎回ではなく数回に1回など調整が必要になるかも。) もしループが継続してないなら、実行中のメモリやCPU使用率など見て高負荷になってないか確認したりでしょうか。あとは念のためsleepのDeclareの記述の見直しかな。。。(問題なさげですが) ※ 手元にExcelの環境が無い為、動作確認などできないこと、ご理解いただけたら幸いです。 以上、参考にならなかったらごめんなさい。

Mhisao
質問者

お礼

DoEvents を追加したところ、最後まで動作するようになりました。 Dim i As Long For i = 1 To 121 ActiveWindow.SmallScroll Down:=21 Sleep 10000 DoEvents Next i ありがとうございました。この動作画面を録画していたので、パフォーマンスも気になっていましたが、使えています。

関連するQ&A