• 締切済み

MS-EXCEL VBA (マクロ) の書き方

エクセルの複数シートのデータを両面印刷可能なプリンターで、両面印刷するためのマクロを書きたいのですが、どうしてもうまく行きません。 シート名は、1,2,3,4 と4シートで、それぞれのシートにA4用紙1枚分のデータがあり、それが印刷範囲に指定されています。それら4枚分の印刷範囲を、1枚のA4用紙に、2ページを1ページに圧縮+両面印刷 で印刷したいのですがどうしてもうまく行きません。(プリンターのプロパティ設定はマクロ実行前にSheet1で行っているのですが。) どなたかお分かりになる方、お手数ですがご教授願えませんでしょうか。 補足:ちなみに、4ページ分を1ページに印刷して、片面での印刷は以下のマクロで出来ています。 Sheets(Array("1", "2","3","4")).Select Sheets("1").Activate 'この時Sheet1で、プリンターのプロパティで、4ページを1ページに印刷を選択してある。 ActiveWindow.SelectedSheets.PrintOut Copies:=1 よろしくお願いします。 ちなみにプリンターは事務所のネットプリンターで、TOSHIBA e-STUDIO4520CSeriesPCL6 です。

みんなの回答

  • ap_2
  • ベストアンサー率64% (70/109)
回答No.2

プリンターのプロパティ設定は、Sendkeysでイケルことが多いですよ。 ANo.1の補足を読んだ感じだと、、 全シート印刷されているのでSelectはできているはず。「あらかじめ設定」だと、プリンター設定の反映され方に違いがあるのかな・・・? だとしたら、シート選択した後、プリンターを設定するしかないと思います。 Sendkeys試してみてください。

Spock7772
質問者

補足

私の質問へのご協力大変ありがとうございます。 >全シート印刷されているのでSelectはできているはず。「あらかじめ設定」だと、プリンター設定の反映され方に違いがあるのかな・・・? 確かに、おっしゃる通りだと思います。 >Sendkeys試してみてください。 Sendkeys をトライしようと思うのですが、未熟にもこのコマンドは使ったことがなく、これから勉強します。又、その結果を報告します。よろしく。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

「マクロの記録」は行いましたか? 1シート4ページだろうが、4シート各1ページだろうが同じこと。 プリンタの設定です。会社で名称が異なるかも?だけど「割付」機能+両面ですね。 > 2ページを1ページに圧縮+両面印刷 マクロの記録中に、プリンタで割付設定して両面印刷を指定してください。

Spock7772
質問者

補足

早速のご返事ありがとうございます。 >マクロの記録中に、プリンタで割付設定して両面印刷を指定してください。 マクロの記録中に、プリンターで割付設定や両面設定しても、マクロには何にも記録されません。 このようなプリンターの設定は、マクロでは出来ないと思います。 ですから、マクロ実行前に最初のシートである "1"(シート名) にて手動でプリンター設定をし、 例えば、 Sheets(Array("1", "2", "3", "4")).Select Sheets("1").Activate ActiveWindow.SelectedSheets.PrintOut Copies:=1 を実行したのですが、両面印刷を設定していると、 Sheets(Array("1", "2", "3", "4")).Select も実行しなくなり、最初の"1" のデータだけA41枚の4分の1の面積に印刷され(このシートは残り空白で出てきて)、残りのシートはそれぞれがA41枚で印刷され、合計4枚でてきます。 両面印刷に設定していないと、Sheets(Array("1", "2", "3", "4")).Select  が実行され、全てのデータがA4の4分の1の面積に印刷され、全部でA4一枚(片面印刷)で出て来ます。

関連するQ&A

  • エクセルのマクロの記述について

    VBA初心者ですのでどうか詳しく教えてください。下記のマクロをエクセルで組んだのですが・・・ -------------------------------------------------------------------- Sub hideworksheets() Worksheets("sheet1").Visible = False End Sub Sub ボタン_Click() ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet3").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet4").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub ------------------------------------------------------------ 1.上記設定で"sheet5"という別シートにボタンを設置した場合、このボタンを実行すると、シート1~4のほかにシート5まで印刷されてしまいます。シート5を印刷したくない場合のVBAの記述について教えてください。 2.「Sub hideworksheets()  Worksheets("sheet1").Visible = False    End Sub」    の箇所で、シート1を非表示にしたいのですが、このマクロを実行時、「Sub ボタン_Click()」以下のマクロを実行しようとすると、「実行時エラー1004 worksheeクラスのselectメソッドが失敗しました」のエラーがでてしまいます。シート1を非表示にし、無事印刷のマクロを実行する為の記述を教えてください。

  • エクセルVBA実行後にファイルを自動で閉じるVBA

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("毎日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("火曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("水曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("木曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("金曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("土曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWorkbook.Save ActiveWindow.Close あるエクセルファイルのボタンに上記のVBAが記入されています。 そのボタンを押すと「工程分析.xls」ファイルを呼び出し各シートを自動印刷して保存して閉じるVBAです。 質問ですがボタンの配置されたあるエクセルファイルの上記VBAの処理を全て完了した後に上書き保存を自動で実行し、自動であるエクセルファイルを閉じるVBAはどの様に追加すれば良いでしょうか?

  • excel vba 印刷部数設定

    excel 2002を使用しています。 マクロで印刷および印刷プレビューせずに、印刷部数を設定する方法を探しています。 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Preview:=True  ではプレビューしてしまいます。 ActiveWindow.SelectedSheets.PrintOut Copies:=1  では印刷してしまいます。 印刷およびプレビューしない方法はないものなのでしょうか。 よろしくお願いします。

  • エクセル マクロの作り方

    はじめまして エクセルのマクロ初心者です。 ツール→マクロ→新しいマクロの記録にて 開いているシートをA1~V68まで(すべての範囲でもOKです)をコピーし、別の貼り付け用シートに貼付、3つのタブを印刷して閉じ、開いているシートを表示する。という内容のマクロを登録しました。 台紙で以上のマクロを登録し、台紙を複製しました。 マクロを実行すると複製されたシートのA1~V68までではなく、台紙のA1~V68までが印刷されて困っています。 どうすれば解決するでしょうか???詳しい方おしえてください。 尚、下記に記録されたものを載せておきますので、訂正部分など教えてもらえたら助かります。 (マクロの記録の上部を訂正すると良いような気はするのですが…。初心者なのもので範囲の指定の仕方がわるいのでしょうか???) よろしくお願いします。 Sub マクロ名() ' ' マクロ名 Macro ' マクロ記録日 : 2007/10/14 ユーザー名 : ??? ' ' Application.Run "hozon1.初期" Range("A1:V68").Select Selection.Copy ChDir "C:\Documents and Settings\Administrator\デスクトップ\日報、点呼簿" Workbooks.Open Filename:= _ "C:\Documents and Settings\Administrator\デスクトップ\日報、点呼簿\平日,日曜、祭日点呼簿.xls" Cells.Select ActiveSheet.Buttons.Add(509.25, 1.5, 72.75, 12.75).Select ActiveSheet.Paste Sheets("大型1").Select Application.CutCopyMode = False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("大型2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("小型1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWindow.Close ActiveWindow.SmallScroll Down:=-51 Range("J3").Select End Sub

  • エクセル2007 印刷マクロ

    A1からE25までを印刷したいのですが,現在このようにしています。 ActiveSheet.PageSetup.PrintArea = "$A$1:$E$12" ActiveWindow.SelectedSheets.PrintOut Copies:=1 ActiveSheet.PageSetup.PrintArea = "$A$13:$E$25" ActiveWindow.SelectedSheets.PrintOut Copies:=1 これを,ActiveSheet.PageSetup.PrintArea = "$A$1:$E$25" にすると,1枚目と2枚目の区切りが自分の思うようになりません。 改ページプレビューを使って,ページ区切りを設定するのではなく, マクロで何とかしたいと考えています。 1枚目はA1:E12,2枚目はA13:E25に固定する方法を教えて下さい。

  • 指定する曜日の時に特定のエクセルファイルを印刷

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("毎日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("火曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("水曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("木曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("金曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("土曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True  ActiveWorkbook.Save ActiveWindow.Close あるエクセルファイルのボタンに上記のVBAが記入されています。 そのボタンを押すと「工程分析.xls」ファイルの各シートを自動印刷して保存するVBAです。 ボタンが設置されているシートのK1には「TODAY()」の式が入っています。これは当日の日付を自動で表記する様になっています。 質問ですがボタンを押すと毎日印刷シート+K1に記入されている日付の曜日のシートのみを印刷するVBAはどの様にすれば良いでしょうか? 例えば今日(2016年9月10日)で言うと土曜日なのでボタンを押すと工程分析.xlsファイルの毎日印刷シート+土曜日印刷のみ出力されると言う事です。 明日(2016年9月11日)は日曜日なのでボタンを押すと工程分析.xlsファイルの毎日印刷シート+日曜日印刷シートのみが出力される形です。 よろしくお願いします。

  • エクセルマクロ印刷時にプリンタを指定できますか?

    エクセル2002を使用しています。VBAはまったくわかりません。 マクロの自動登録で印刷を記録すると、通常使うプリンタから 出力されるようですが、LANでプリンタ複数使用可能な環境です ので、いちいち通常使うプリンタを変更するのではなく、マクロ 実行時にプリンタを選択したく思います。  因みに、以下のマクロはSheet1に値を入力し、Sheet1の値をコピー したSheet2を印刷するというマクロです。このマクロのどの部分に コードを付け加えればプリンタをこのマクロ実行時に選択可能でしょうか? もしくはマクロではプリンタを選択できないのでしょうか? どうぞよろしくお願いいたします。 ****************************************************************** Sub 印刷() Sheets("Sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("Sheet1").Select End Sub *******************************************************************

  • Excelで両面印刷

    Excel2007を使っています。 プリンタは,両面印刷の設定をしている状態です。 マクロで印刷をかけると,あるシートは両面印刷してくれますが, 違うシートはしてくれません。 シート名が違うだけで,後は全く同じマクロなのに不思議です。 理由をご存じの方,教えてください。 Sub 縮小印刷1() Sheets("縮小印刷1").Select A = InputBox("どこから印刷しますか?") B = InputBox("どこまで印刷しますか?) For I = A To B Step 2 Range("D2").Value = I ActiveSheet.PageSetup.PrintArea = "$A$1:$B$16" ActiveWindow.SelectedSheets.PrintOut Copies:=1 Next I End Sub

  • Microsoft Visual Basicについて質問します。

    シート名「委託内訳」でAN70がスペースの時に1ページのみ印刷し,スペースでない時に1~2ページを印刷したい時,下記のマクロでは2ページ目が印刷出来ません。 印刷できる方法は何かありますか? よろしくお願いします。 Sheets("委託内訳").Select Range("AN70").Select ActiveCell = ATAI If ATAI = "" Then ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _ :=True Else ActiveWindow.SelectedSheets.PrintOut From:=1, To:=2, Copies:=1, Collate _ :=True End If

  • Excel VBAで自動印刷プログラムの作り方を教えて下さい。

    あるファイルにある全てのグラフを印刷するマクロを作りたいのですが、 どのようにすれば良いのでしょうか? Sub Macro2() ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub に何を付け足せば良いのでしょうか? 何卒よろしくお願い致します。

専門家に質問してみよう