[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『チェックボックスで選んだシートを印刷プレビューしたい』(うる)
いつもお世話になっております。
ユーザーフォームのチェックボックス(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.