Excelシート上にプログラムでデータを挿入していると、シートの印刷範囲って変わってきませんか?
その時はだいたい
●印刷前に印刷範囲を指定する
ってことで・・・何でここは手動?ってなりますよね!!
そんな時はこの部屋の方法で印刷範囲をプログラムで行うと他の部屋にある印刷やPDF化にそのままプログラムが進むことが可能になってとても便利ですよ
また、一番したの方にコメント欄があるからよかったら質問・感想などメッセージ入れてください
Excelシートの印刷範囲を指定する
Excelシート上で印刷範囲を設定するプログラム
●●サブルーチンプログラム●●
標準モジュール(SheetCtrl)にプログラムを記述をVBAコードの標準モジュールに追加する☆
※標準モジュールの追加は「VBA 201号室:描画オブジェクトの名前取得」を参照してください
サブルーチンの内容
SheetPrintArea(shtName As String, rangeStr As String)
引数:shtName = シート名、rageStr = 範囲(Range)文字列:例=”A1:G10″
戻り値:正常に指定=True、対象のシート名が無い=False
▼プログラム▼
Public Function SheetPrintArea(shtName As String, rangeStr As String)
Dim Ret As Boolean
Ret = True
'シート名の有無を確認
Dim Buf As String
On Error Resume Next 'エラーがあっても続行指定
Buf = Sheets(shtName).Name
If Err.Number > 0 Then 'エラーが有った場合は値がある
Ret = False 'シート名が存在していない
Else
'--------------------
'シートの印刷範囲
Worksheets(shtName) .PageSetup.PrintArea = rangeStr
'--------------------
End If
SheetPrintArea = Ret
End Function
呼び出すプログラム(例)
サブルーチンプログラムができたので呼び出すコマンドボタンを配置してプログラムを記述する
コマンドボタンがクリックされた時に実行されるプログラム
「CommandButton8」
※ボタンの配置方法は「VBA 201号室:描画オブジェクトの名前取得」を参照してください
印刷範囲を変更するシート:シート名=Sheet2
呼び出すプログラム例
シート名=”Sheet1”
印刷範囲=A1~G20
シート名=”Sheet2”と印刷範囲=A1:G20を指定して印刷範囲を変更する
▼プログラム▼
Dim rStr As String
Dim ret As Boolean
rStr = "A1:G20"
ret = SheetPrintArea("Sheet1", rStr)
If ret = False Then
Call MsgBox("シート名のエラー", ,vbCritical+vbOKOnly, "エラー")
Endif
プログラムの実行
〇正常に印刷範囲が指定された場合
印刷範囲がきれいに設定されましたね!!!
コメント