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