[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAを使用してシート別に印刷』(TAD)
全文検索しても近い様な質問がありませんでしたので質問させて頂きます。 表紙、ページ1、ページ2、ページ3の合計のシートが有ります。 表紙のA1セルに1と入力するとページ1が印刷され、2と入力すればページ2が印刷される様なVBAは出来ますでしょうか? 最近VBAを始めたばかりで本とホームページ等で検索してみましたが分かりません。教えて下さい。 あとVBAの入力方法でいまだに本等で見ても分からないのが、 Sub *****() ????******** ??????******** ?????? ********** ??????******** ????********* End Sub ?の箇所の空白は、見易さだけで空白にしているのでしょうか。 余りにも初心者すぎて本等には掲載していません。教えて頂けないでしょうか。 今後VBAで勉強したいのですが、この空白が気になって仕方ありません。 どなたか〜助けて下さい。御願いします。
>表紙のA1セルに1と入力するとページ1が印刷され、2と入力すればページ2が印刷される様なVBAは出来ますでしょうか?
出来ますが、御質問内容からすると、 シート「表紙」にコマンドバー「フォーム」にあるボタンをセルB1辺りに配置して、セルA1に数値を 入力し、そのボタンクリックで対応したシートを印刷する という仕様にしたらいかがですか? セルA1に数値入力と同時に印刷する という仕様はまたおいおいと・・・。
標準モジュール(Module1)に
'=============================================================
Option Explicit
Sub 準備() '印刷ボタンの作成
Dim rng As Range
With ActiveSheet
Set rng = .Range("b1")
With .Buttons.Add(rng.Left, rng.Top, rng.Width, rng.Height)
.Caption = "印刷"
.OnAction = ThisWorkbook.Name & "!sheet_print"
End With
End With
End Sub
'===================================================================================
Sub sheet_print() '表紙のセルA1に入力された番号に対応したシートを印刷する
Const pg = "ページ"
Dim func As Variant 'セルA1の値を受け取る変数
func = Worksheets("表紙").Range("a1").Value 'セルA1の値を変数funcに移行
If IsNumeric(func) = True Then '変数funcが数字だったら?
If func > 0 And Int(func) = func Then '変数funcが自然数だったら?
On Error Resume Next 'エラー処理を有効にする
Worksheets(pg & func).PrintPreview '印刷プレビュー
'実際に印刷するなら、上の行を Worksheets(pg & func).printout にして下さい
If Err.Number <> 0 Then MsgBox Err.Description '何らかのエラーがあったら、エラーメッセージ表示
On Error GoTo 0 'エラー処理を無効にする
Else '変数funcが自然数ではなかったら?
MsgBox "指定された番号が正しくありません" 'エラーメッセージ表示
End If
Else '変数funcが数字でなかったら?
MsgBox "数字が指定されていません" 'エラーメッセージ表示
End If
End Sub
まず、シート「表紙」をアクティブにした状態でプロシジャー「準備」を実行してみてください。
セルB1辺りに印刷というボタンが作成されるはずです。 尚、表紙と言うシートがシート保護などされていると、プログラムがエラーになってしまいますので 保護を解除した後、実行してください。
正常にボタンが作成されれば、準備完了です。
セルA1に1,2,3等と入力してボタンをクリックしてください。 対応するシートが印刷されるはずです。 コードは、印刷プレビューになっていますから、コメントに従って、印刷できるように変更してください。
尚、印刷対象のシート名は、ページ1、ページ2、ページ3 というように数字は、半角の数字を想定しています。
シート名の数値が実際には、全角だったりすると、正常に作動しません(訂正が必要です)。
>?の箇所の空白は、見易さだけで空白にしているのでしょうか。 そうです。
Sub sheet_print()
Const pg = "ページ"
Dim func As Variant
func = Worksheets("表紙").Range("a1").Value
If IsNumeric(func) = True Then
If func > 0 And Int(func) = func Then
On Error Resume Next
Worksheets(pg & func).PrintPreview
If Err.Number <> 0 Then MsgBox Err.Description
On Error GoTo 0
Else
MsgBox "指定された番号が正しくありません"
End If
Else
MsgBox "数字が指定されていません"
End If
End Sub
これでも同じです。が、どっちが見易いかは、明らかですよね? 入れ子になった制御構造 毎にインデントを付けるという習慣は付けてください。 大昔のBasic(N88Basic)の時代は、このインデントの空白文字さえ、勿体無くて(メモリ節約)、 殆どの雑誌でもインデントが付けられていなかったと思いますが、これは、今は昔の話です。
ichinose
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.