[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『チェックボックスで選んだシートを印刷プレビューしたい』(うる)
いつもお世話になっております。
ユーザーフォームのチェックボックス(2〜4)にチェックを入れた場合にCtrl + 選択したシートで印刷プレビューしたときのようにしたいのですが、どのようにすればいいのかわからずご教示いただきたいです。
For〜Nextを使うのかな?と思うのですが勉強不足のため何をどうしたらいいのかわかりません…
ユーザーフォームに
CheckBox1〜4
CommandButton1
を置いています。
CheckBox1は「すべて印刷」
CheckBox2は「集計表」
CheckBox3は「請求書」
CheckBox4は「内訳書」
CommandButton1は「印刷プレビュー」
以下現在打ち込んでいるコードです。
初心者がネットで調べつつ書いたものなので見づらいかと思いますが、よろしくお願いします。
Private Sub CheckBox1_Click()
If CheckBox1 Then
CheckBox2.Value = True
CheckBox3.Value = True
CheckBox4.Value = True
Else
CheckBox2.Value = False
CheckBox3.Value = False
CheckBox4.Value = False
End If
End Sub
Private Sub CommandButton1_Click()
If CheckBox1.Value = True Then
Me.Hide
Worksheets(Array("集計表", "請求書", "内訳書")).PrintPreview
Unload Me
ElseIf CheckBox2.Value = True Then
Me.Hide
Worksheets("集計表").PrintPreview
Unload Me
ElseIf CheckBox3.Value = True Then
Me.Hide
Worksheets("請求書").PrintPreview
Unload Me
ElseIf CheckBox4.Value = True Then
Me.Hide
Worksheets("内訳書").PrintPreview
Unload Me
Else
MsgBox "選択してください。"
End If
ActiveWindow.SelectedSheets(1).Select
End Sub
Private Sub UserForm_Initialize()
If CheckBox2.Value = True Then
With Worksheets("集計表").PageSetup
.PrintArea = "$A$1:$BB$39"
.Orientation = xlLandscape
.PaperSize = xlPaperA4
.Zoom = False
.FitToPagesTall = 1
.FitToPagesWide = 1
End With
ElseIf CheckBox3.Value = True Then
With Worksheets("請求書").PageSetup
.PrintArea = "$A$1:$X$21"
.Orientation = xlLandscape
.PaperSize = xlPaperA4
.Zoom = False
.FitToPagesTall = 1
.FitToPagesWide = 1
End With
ElseIf CheckBox4.Value = True Then
Sheets("内訳書").Select
With Worksheets("内訳書").PageSetup
.PrintArea = ""
End With
Else
End If
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows10 >
もしキャプションにシート名が入っていれば、キャプションを配列にしちゃえばいいんじゃないですかね?
あとチェックボックス1も、コマンドボタンにして、チェックボックスを全部選択させるほうがいいんじゃないでしょうか?
Private Sub CommandButton1_Click()
Dim ctrl As Variant
Dim wss As String
For Each ctrl In Me.Controls
If TypeName(ctrl) = "CheckBox" Then
If ctrl.Value = True Then wss = wss & "," & ctrl.Caption
End If
Next ctrl
wss = Mid$(wss, 2)
Me.Hide
Sheets(Split(wss, ",")).PrintPreview
Unload Me
End Sub
余談で、モーダルフォームでMe.Hide前にPrintPreviewすると嵌りますね・・・
(稲葉) 2019/03/15(金) 18:13
お返事が遅くなり申し訳ございません。
早速当てはめましたところ希望通りに動きました。
またご指摘頂いたチェックボックス1をコマンドボタンに置き換えてみました。
実際に使用する従業員にどちらがいいかを確認してみます。
ご提示頂いたコードをヘルプや下記のサイトの解説と共に「何をしているか」を少しずつ理解していきたいと思います。
https://vba-beginner.com/
本当にありがとうございました。
(うる) 2019/03/18(月) 17:59
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.