前提・実現したいこと
excel vbaで印刷用のマクロを作成しています。
J9に印刷するフォルダのディレクトリ、
I15に印刷するシートの名前、
I17に印刷するシートの番号
を記入する場所を設けています。
J9、I15には文字列が入ります。
I17には数字が入ります。
また、スクショでは両方に記述していますが、
実際に使用する際にはI15とI17はいずれか一つのみを記入します。
例えば「D:\●\Desktop\ファイル」内に存在する「01.xls」「02.xls」「03.xls」(それぞれ複数のシート持ち)のうち
①すべてのエクセル内の「ああああ」シートを印刷する場合
<準備>J9に「D:\●\Desktop\ファイル」、I15に「ああああ」を入力し、マクロを起動する。
<結果>「01.xls」「02.xls」「03.xls」の「ああああ」という名前のシートのみが印刷される。
②すべてのエクセル内のsheet1に当たるシートを印刷する場合
<準備>J9に「D:\●\Desktop\ファイル」、I17に「1」を入力し、マクロを起動する。
<結果>「01.xls」「02.xls」「03.xls」のsheet1のみが印刷される。
という動作ができるようにしたいです。
ちなみにフォルダ検索にあるフォルダマークにはファイルの場所を指定してJ9に転記するマクロが、
③の「印刷」ボタンでは下記のマクロが登録されています。
発生している問題・エラーメッセージ
I15に文字を入力して動かすと
Set sheetname = Sheets(ThisWorkbook.Worksheets("印刷").Range("I15").Value)
で「型が一致しません」エラーが発生し、
無視してI17に進むと
Set sheetname = Sheet & ThisWorbook.Worksheets("印刷").Range("I17").Value
で「オブジェクトが必要です」エラーが発生します。
シートを指定しない場合は印刷できましたので、
コメント「集計先のシートを指定し、変数に入れる」
の記述に誤りがあると思うのですが。。。
知恵をお貸しいただければと思います。
該当のソースコード
Sub 印刷() '更新非表示 Application.DisplayAlerts = False 'フォルダの場所を変数に入れる Dim Folder_path As String Folder_path = Worksheets("印刷").Range("J9").Value '集計先のシートを指定し、変数に入れる Dim sheetname As Worksheet If Worksheets("印刷").Range("I15").Value <> "" Then Set sheetname = Sheets(ThisWorkbook.Worksheets("印刷").Range("I15").Value) ElseIf Worksheets("印刷").Range("I17").Value <> "" Then Set sheetname = Sheet & ThisWorbook.Worksheets("印刷").Range("I17").Value Else MsgBox "シートを選択してください" End If '集計するブックを変数に入れ、指定のシートを開く Dim Merge_book As String Merge_book = Dir(Folder_path & "*.xls*") sheetname.Select '指定したフォルダから、Excelファイルを探して開く Do Until Merge_book = "" Workbooks.Open Filename:=Folder_path & "\" & Merge_book '指定したシートを印刷 Workbooks(Merge_book).PrintOut '集計するブックを閉じる Workbooks(Merge_book).Close '次のファイルを探しに行く Merge_book = Dir() Loop '更新表示 Application.DisplayAlerts = True End Sub
補足情報(FW/ツールのバージョンなど)
Windows7 32bit Excel2010での環境です。
もし記述不足等ありましたら補足いたしますので、どうぞよろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/10 03:07