Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
連続印刷するsheetをセルに入力したsheet名で指定して印刷したい
投稿日時: 20/07/09 09:47:07
投稿者: しろくろすけ

お世話になります。
VLOOKUP関数を使用し、連続印刷のマクロをボタンに登録して使用していましたが、印刷するsheetをセルで指定したいです。
今まで使用していたマクロは下記のとおり
 
Sub 臨時連続印刷()
  Dim a, b As Integer
  [u]a = Range("C2")
  b = Range("D2")
 
  ret = MsgBox("印刷設定をしましたか?開始番号、終了番号は入力しましたか?", vbYesNo + vbQuestion, "連続印刷")
 
      If ret = vbYes Then
            For n = a To b
                  Range("B2") = n
                  ActiveSheet.PrintOut
            Next
      Else
            MsgBox "印刷を中止します。先に開始番号、終了番号を設定して下さい。"
      End If
 End Sub
 
以上のとおりです。 ActiveSheet.PrintOutではなく別のsheetをPrintOutしたいです。
sheetは複数あり、変動しますが、1つ指定できればいいです。
よろしくお願いいたします。

回答
投稿日時: 20/07/09 09:51:47
投稿者: QooApp

アクティブシートを印刷するところまでできているようですので
 
シートをアクティブ化するコマンド1つで解決できると思います。
Worksheets("シート名か変数で指定").Activate
 
アクティブシートに対してプリントする前の部分で使用し、
シート名はfor文で参照セルを変動させるだけです。

投稿日時: 20/07/09 10:27:04
投稿者: しろくろすけ

申し訳ありません。私はマクロ初心者で出来上がっているマクロは頂き物の組み合わせです。
 
ActiveSheet.PrintOutを Worksheets("シート名か変数で指定").PrintOut に書き換えればよろしいでしょうか。
 
変数で指定の場合、セルで入力したsheet名と同じsheetを印刷するには、どのようなコードにコードを入力すればよろしいでしょうか。
 
印刷したいsheetは毎月ごとに追加する予定なので、複数あるシートからセルに入力して指定したいのです。

回答
投稿日時: 20/07/09 12:02:56
投稿者: QooApp

めちゃくちゃお人よしなのでこれくらいなら2分で作れますが、
このサイトは利用規約にもある通り、制作依頼はだめです。
 

引用:
コード制作依頼
「●●●を実行するようなマクロを作りたいのですが」「●●●をする方法を教えてください」といった、コード制作依頼ともとれるような質問はおやめください。

 
Option Explicit

Sub 臨時連続印刷()
    '変数宣言は必ず1つの変数に1つの型宣言を付けないと Variant型になり、思わぬバグを生みます。
    Dim i As Long
    Dim ws As Worksheet
    
    '印刷したいシート名が記載されているシートの名前が[Sheet1]
    '印刷したいリストがC2〜C16まで書いてある(ただし、C2の下方向へは増減する
    'と仮定する
    
    'Sheet1(リストが掲載されているシート)をいつでも呼び出せるようにしておく
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    '中止か許可か確認
    If MsgBox("印刷しますがよろしいですか?", vbYesNo + vbQuestion, "連続印刷") <> vbYes Then
        MsgBox "印刷を中止します。"
        Exit Sub
    End If
    
    
    'リストの数だけ印刷する
    'i = 2とは2行目からシート名があるということ。1行目ならi = 1
    '"C"とはC列のこと。D列なら"D"
    For i = 2 To ws.Cells(Rows.Count, "C").End(xlUp).Row
        'i行目のリスト名=シート名のシートをアクティブシートにする
        ThisWorkbook.Worksheets(ws.Cells(i, "C").Value).Activate
        'アクティブシートを印刷する
        ActiveSheet.PrintOut
    Next
    
End Sub

投稿日時: 20/07/09 14:34:37
投稿者: しろくろすけ

マナーについて、ご指摘ありがとうございます。
コードも説明文まで付けて頂いて丁寧にありがとうございます。大変助かりました。おかげさまで意図することができました。ありがとうございました。