質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

解決済

指定したフォルダ内に存在するエクセルファイルのうち、指定したシートのみをすべて印刷したい。

onionion
onionion

総合スコア13

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

2回答

0評価

0クリップ

1202閲覧

投稿2018/09/07 08:17

前提・実現したいこと

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での環境です。

もし記述不足等ありましたら補足いたしますので、どうぞよろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。