VBAで、ワークシートに処理結果をたくさん出力するプログラムを作っているとする。
現在表示されている領域の外にデータが出力された場合、普通はプログラムが終了するまで待って、手動でワークシートをスクロールしなければならない。これでは面倒だから、ちゃんとリアルタイムで追いかけて確認したい。つまり、表示領域外にデータを出力した場合には、自動的にワークシートがスクロールし、最新のデータに追従して欲しい。
こうした動作は、VisibleRange, ScrollRow, ScrollColumn等を使って実現できる。
サンプルコード
' Sleepを使うためのおまじない
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'------------------------------------------------------------
' 指定されたセルに文字列を出力。
' 表示範囲外のセルに出力した場合は、スクロールさせる。
'------------------------------------------------------------
Sub printAndScroll(row, col, str)
Cells(row, col) = str '出力
'シートのスクロール
With ActiveWindow
'行方向にスクロール(マイナス2で微調整している)
If row > (.VisibleRange.Rows(1).row + .VisibleRange.Rows.Count - 2) Then
.ScrollRow = .ScrollRow + 1
End If
'列方向にスクロール(マイナス2で微調整している)
If col > (.VisibleRange.Columns.Columns(1).Column + .VisibleRange.Columns.Count - 2) Then
.ScrollColumn = .ScrollColumn + 1
End If
End With
End Sub
'------------------------------------------------------------
' サンプルmain
'------------------------------------------------------------
Sub main()
'右下に向かってテキトーな文字を出力
For i = 1 To 50
Call printAndScroll(i, i, "(" & i & ", " & i & ")")
Sleep 100 '動作確認のためスリープ
Next
End Sub
0 件のコメント:
コメントを投稿