• ベストアンサー

Excel2010 VBAにて印刷設定の取得

 Excel2010 VBAにてマクロを作成しております。 Excel2010のメインウィンドウの「ファイル」タブ→「印刷」の 画面におきまして、[設定]欄にて設定したページ指定(印刷開始ページ及び 印刷終了ページ)は取得できるのでしょうか?  Workbook_BeforePrintプロシージャにて取得しようと思っているのですが、 ActiveSheet.PageSetupのメンバやThisWorkbookのメンバを見たところ、 印刷の開始ページ及び終了ページの設定が見つかりませんでした。 印刷のページ指定の設定箇所をご存知の方がいらっしゃいましたら 教えて頂きたく宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

直接の回答とは言えないことをまずはお詫びしつつ。 私の頭の中には 「全頁の上端・下端に“同じモノ”を印刷する」 という事がヘッダー・フッターの意義である、というモノがありますので (当然、ページ番号などの可変部分は除きます)、 質問者さまの > 別シートに記述の「ページごとのヘッダー値」 と言う考え方にはなかなか賛同できずにいます。 具体的に「ヘッダーフッターの位置にどのように印刷したいのか」がわかれば、 なんとなくでも策が見いだせるかもしれません。 例えば、 「奇数ページは右端にヘッダーフッターを、偶数ページは左端に」 と言うのであれば、2007以降「奇数/偶数ページ別指定」というオプションが付きましたので 単純にこの機能を使ってやれば済みます。 潰れて見辛いかもしれませんが、 「ページ設定」の中、「奇数/偶数ページ別指定」にチェックを入れ、 「ヘッダー(フッター)の編集」をクリックすると、 「奇数ページ/偶数ページのヘッダー(フッター)」のタブが現れますので、 これで別々に設定してやります。 ちなみにVBAで記述する際は Sub ODD_EVEN_HEADER_FOOTER()   Application.PrintCommunication = False   With ActiveSheet.PageSetup     ' 奇数ページのヘッダー/フッター     .LeftHeader = ""     .CenterHeader = ""     .RightHeader = ""     .LeftFooter = ""     .CenterFooter = ""     .RightFooter = "奇数"     ' 奇数/偶数ページ別ON     .OddAndEvenPagesHeaderFooter = True     '偶数ページのヘッダー/フッター     .EvenPage.LeftHeader.Text = ""     .EvenPage.CenterHeader.Text = ""     .EvenPage.RightHeader.Text = ""     .EvenPage.LeftFooter.Text = "偶数"     .EvenPage.CenterFooter.Text = ""     .EvenPage.RightFooter.Text = ""   End With   Application.PrintCommunication = True End Sub こんな感じのようです。 いや、そうじゃない。本当に「ページ別に変えたいんだ」というのであれば、 回答として「エクセルにはその機能は無いはずです」と言うものを提示させていただきます。 前述の通り、それは「ヘッダー/フッターの考え方と若干ずれている」からです。 強引にコレを実現するなら ※例えば1行目から100行目で10行ごとに改ページなら まずは印刷範囲を指定して、 以下10行ごとに ・印刷範囲を指定 ・ヘッダー/フッターを設定 ・印刷 を繰り返すようなイメージになるのではないかなぁ、と思います。 以上、何かの参考までにお納めくださいませ。

totty2013
質問者

お礼

 ご回答ありがとうございました。 > 直接の回答とは言えないことをまずはお詫びしつつ。  ご丁寧にありがとうございます。 こちらこそご回答を頂きながらお礼が遅くなりまして申し訳ありません。 > 私の頭の中には > 「全頁の上端・下端に“同じモノ”を印刷する」 > という事がヘッダー・フッターの意義である、というモノがありますので > (当然、ページ番号などの可変部分は除きます)、 > 質問者さまの >> 別シートに記述の「ページごとのヘッダー値」 > と言う考え方にはなかなか賛同できずにいます。 > > 具体的に「ヘッダーフッターの位置にどのように印刷したいのか」がわかれば、 > なんとなくでも策が見いだせるかもしれません。  tsubuyuki様の仰るのもごもっともです。 ヘッダー・フッターは同じものを印刷すると理解しているのですが、 ページ番号などの可変部分は使用できるので、同じように可変に できないものかと思ってしまっています。 具体的には1枚のシートに月報を作っておりまして、月ごとに 改ページを行っております。  4ページ目:2013年4月  5ページ目:2013年5月  6ページ目:2013年6月  ~  13ページ目:2014年1月  14ページ目:2014年2月  15ページ目:2014年3月 ※先頭ページ番号を4に設定  最初の質問の仰々しさからすると大した内容ではない ヘッダー・フッターなのですが、ヘッダーとフッターには  ヘッダー:yyyy年m月 月報  フッター:月ごとの注意事項 を印刷しようと考えております。 ExcelVBAでの記述は Workbook_BeforePrintで 印刷ページ分ループ内にて ActiveSheet.PageSetup.CenterHeader =   StrConv(CStr(Format(DateSerial("2013", ページ番号, "1"), "yyyy年m月")), vbWide) と設定して1枚ずつ印刷を実行するイメージです。 > 例えば、 > 「奇数ページは右端にヘッダーフッターを、偶数ページは左端に」 > と言うのであれば、2007以降「奇数/偶数ページ別指定」というオプションが付きましたので > 単純にこの機能を使ってやれば済みます。 > > .... > こんな感じのようです。  このような機能もあるのですね。 今回は奇数/偶数ページでは分けられないので利用させて頂くことは できないようですが、よい知識を得ることができました。 ありがとうございます。 > いや、そうじゃない。本当に「ページ別に変えたいんだ」というのであれば、 > 回答として「エクセルにはその機能は無いはずです」と言うものを提示させていただきます。 > 前述の通り、それは「ヘッダー/フッターの考え方と若干ずれている」からです。 > > 強引にコレを実現するなら > ※例えば1行目から100行目で10行ごとに改ページなら > まずは印刷範囲を指定して、 > 以下10行ごとに > ・印刷範囲を指定 > ・ヘッダー/フッターを設定 > ・印刷 > を繰り返すようなイメージになるのではないかなぁ、と思います。 > > > 以上、何かの参考までにお納めくださいませ。  先ほどのヘッダーフッターの奇数/偶数ページ別指定のように Excelとしてヘッダーフッターの機能として沿っているものは ついているわけで。Win32APIのOpenPrinter・GetPrinterを使用して、 DEVMODEやPRINTER_INFOなどを取得してみましたが、どこにも 印刷開始ページ、終了ページの情報はありませんでした。 tsubuyuki様の仰るように僕の行おうとしていることは ヘッダーフッターの考え方からずれているのかと思われます。 やはりシートに記述する内容なのもしれません。

その他の回答 (1)

noname#187541
noname#187541
回答No.1

こんにちは。 取得する目的は? 取得ってできるのかな? 設定は、PrintPutメソッドに引数があるのでできます。

totty2013
質問者

お礼

 早々とご回答ありがとうございます。  目的としましては以下のように印刷時に 別シートに記述してあるページごとのヘッダー、 フッターの内容に入れ替えようと思っております。 Private Sub Workbook_BeforePrint(Cancel As Boolean)   ※取得できるなら「ファイル」タブ→「印刷」にて    指定したページ番号ループにしたい    For i = 開始ページ To 終了ページ     With ActiveSheet      With .PageSetup        .CenterHeader = 別シートに記述のページごとのヘッダー値        .CenterFooter = 別シートに記述のページごとのフッター値      End With      .PrintOut 1ページずつ     End With    Next End Sub  取得できないようでしたら、印刷用のボタンと 開始ページ、終了ページを設定するシートを作成して そこから行うことになるのかなと思っております。  

関連するQ&A

  • エクセルVBAのBeforePrintで

    ThisWorkbookモジュールで Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name <> "Sheet1" Then Exit Sub MsgBox "BeforePrintイベント発生" End Sub を使って、Sheet1での印刷のイベントを取得できます。 ただ、指示がPrintなのかPrintPreviewなのかが取得できません。 印刷またはプレビューされる前にどちらの指示なのかを取得する方法がありますか?

  • 【Excel VBA】印刷について

    Excel2003を使用しています。 不要ページをスキップして印刷するマクロを作成し、特定のBookでのみ使用しているのですが、このBookを印刷するときはカラー印刷を指定したいので、この印刷マクロの中でカラー印刷を指定できたらと思っているのですが、このようなことは可能でしょうか?可能であれば、どのように記述すればいいでしょうか? ページ設定のマクロの記録をとったところ、下記のように(不要と思われる設定は削除しました)記述されていました。 [BlackAndWhite = False]という部分がカラー印刷に関するコード?かと思い、追加してみたのですが、カラー印刷されませんでした。 With ActiveSheet.PageSetup .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = 98 .PrintErrors = xlPrintErrorsDisplayed End With よろしくお願いします。

  • VBAの印刷について

    VBAでの質問です。 ある処理を施したあとにページ設定をして印刷するプログラムを作成しているのですが、なぜか同じものが2枚出力されてしまいます。 1枚だけ指定して印刷するにはどのようにコードを書けば良いかどなたか教えて下さい。お願いします。 With ActiveSheet.PageSetup 'ページ詳細設定 .PaperSize = xlPaperA4 .Zoom = False .FitToPagesTall = 1       .FitToPagesWide = 1     End With 'ActiveSheet.PrintOut Worksheets(sheetname5).PrintOut ActiveWorkbook.SaveAs Filename:=takiicode & "_" & Format(today, "yyyymmdd") & ".xls" '保存) Workbooks(takiicode & "_" & Format(today, "yyyymmdd") & ".xls").Close SaveChanges:=True '終了

  • VBAに範囲を指定して印刷

    特定のセルに数字を入力することでVLOOKUPで印刷ページを 検索して指定できるシートを作成しています。 下記のようなVBAを作成しました。 印刷開始ページと印刷終了ページを指定する場合、 セルの指定はどのようにすれば、よいのでしょうか? 開始ページと終了ページが同じセルの為、 開始ページ=Rnage("セル") 終了ページ=Rnage("セル") としてしまいますと、エラーが出てしまいます。 Sub 印刷() Dim S As Long Dim B As Long S = Application.InputBox("印刷開始ページを入力", Type:=1) If 開始ページ = 0 Then Exit Sub B = Application.InputBox("印刷終了ページを入力", Type:=1) If 終了ページ = 0 Then Exit Sub ActiveSheet.PageSetup.Order = xlOverThenDown ActiveWindow.SelectedSheets.PrintOut _ From:=S, To:=B, Collate:=True End Sub 宜しくお願い致します。

  • Excel2003 VBAで印刷 セル指定

    よろしくお願いします。 ボタン5をクリックしてある範囲を印刷したいのですが、私が知っているものはセル指定でActiveSheet.PageSetup.PrintArea = Range("A90:K130") であれが印刷可能なのですが最後の行までにしたいのですがどうしてもうまくいきません。 ActiveSheet.PageSetup.PrintArea = Range(Cells(90, 1), Cells(r, 11)) それと同時に11列全部(文字は小さくてもいいのですが)一枚に印刷したのですが よろしくお願いします。 Private Sub CommandButton5_Click() res = MsgBox("決済記録を印刷します", vbYesNo + vbQuestion) If res = vbYes Then r = Range("A65536").End(xlUp).Row + 1 'Range(Cells(90,1),Cells(r,11)) '印刷したい範囲 ActiveSheet.PageSetup.PrintArea = Range("A90:K130") ActiveSheet.PrintOut preview:=True End If End Sub

  • 【Excel VBA】ユーザーフォーム

    Excel2003を使用しています。 内容的には前回の(質問No.3376017)続きなのですが… あるシートに対して、印刷範囲指定のマクロを作りました。 印刷不要ページを指定して、それ以外のページを印刷するというもので、印刷開始ページ、終了ページ、不要ページをユーザーフォームを作ってテキストボックスに入力するようにしました。 そのテキストボックスの下に、『設定』と『キャンセル』のボタンを作っていますが、『キャンセル』を選択した場合は、このマクロを実行しないで終了させたいのですが、可能ですか? 『設定』と『キャンセル』の処理は、イベントプロシージャ(クリック)に記述していますが、『キャンセル』ボタンをクリックしたときにマクロを実行しないで終了するには、どのように記述すればいいでしょうか?[Exit]を使うのかな?と思って書いてみましたが、エラーが出てしまいました(^_^;) よろしくお願いします。

  • EXCEL 印刷時のVBAでのフッター制御

    こんにちは。 Excel2000でVBAを使用して、印刷プレビューもしくは印刷処理を行なっています。 (数十枚あるシートから10ページほどを印刷) 処理が実行された際に、以下のモジュールでフッターを挿入しているのですが、 For i = 1 To 10 With Sheets(i).PageSetup .RightFooter = "sample" End With Next 印刷プレビューの場合、使用者がプレビュー画面の「設定」ボタンを クリックしてフッターを書き換えられてしまいます。 これを書き換えられないように(もしくは書き換えても最終的には こちらが指定した文字で出力できるように)したいのですが、何か良い方法はありませんでしょうか。 Workbook_BeforePrint(Cancel As Boolean) で処理を行なっても手動変更が優先されていました。 どうぞ良い智恵をご教授ください!よろしくお願い致します。

  • 印刷範囲を設定するvbaコード

    エクセルシートの印刷範囲を設定するvbaコードで Sub Macro1() With ActiveSheet.PageSetup .PrintArea = "$A$1:$c$10" End With End Sub としてるのですが、 "$A$1:$c$10"の部分を Range(Cells(1, 1), Cells(10,3)) 形式でやりたいのですが、 うまくできません。 Sub Macro1() With ActiveSheet.PageSetup .PrintArea = Range(Cells(1, 1), Cells(10,3)) End With End Sub としても、全部が印刷範囲として選択されてしまいます。 というか、印刷範囲が設定されません。

  • AccessにてExcelの印刷範囲を設定したい

    お世話になっております。 ご存知の方がいらっしゃいましたら、お手数ですがご教授願えますでしょうか? AccessからデータをExcelへエクスポートした際、 印刷範囲の指定を行いたいのですが、うまくいきません。 データを指定したセルにセットした後、 ActiveSheet.PageSetup.PrintArea = "$A$1:$I$30" と指定しているのですが、 「オブジェクト変数またはWithブロック変数が設定されていません」 とエラーが出てしまいます。 オブジェクトブラウザで確認すると、 ActiveSheetはExcel.Globalのメンバとなっていますが、 Excel.Globalから書き込んでも同じエラーが出てしまいます。 もしかしてAccess上ではExcelの印刷範囲は指定できないのでしょうか? お手数ですが宜しくお願いいたします。

  • VBAの範囲印刷設定を修正したいのですが

    VBAの初心者です。詳しく教えてください。 1.下記のVBAでシートを非表示にしたときに実行時エラー1004が出るのですが  どうしたらよいのですか。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Sub printappointedrange() Worksheets("シート1").Activate Range("A1:AB42").Select 'セル範囲の選択 With ActiveSheet .PageSetup.PrintArea = Selection.Address '印刷範囲の指定 .PrintOut '印刷 .PageSetup.PrintArea = False '印刷範囲のクリア End With End sub ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 2.シートに印刷ボタン作成して、印刷はできるのですが、印刷する前にプリンターの設定を変更する方法は無いのですか。

専門家に質問してみよう