• ベストアンサー

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  取得できないようでしたら、印刷用のボタンと 開始ページ、終了ページを設定するシートを作成して そこから行うことになるのかなと思っております。