プロが教える店舗&オフィスのセキュリティ対策術

 Excel2010 VBAにてマクロを作成しております。
Excel2010のメインウィンドウの「ファイル」タブ→「印刷」の
画面におきまして、[設定]欄にて設定したページ指定(印刷開始ページ及び
印刷終了ページ)は取得できるのでしょうか?

 Workbook_BeforePrintプロシージャにて取得しようと思っているのですが、
ActiveSheet.PageSetupのメンバやThisWorkbookのメンバを見たところ、
印刷の開始ページ及び終了ページの設定が見つかりませんでした。
印刷のページ指定の設定箇所をご存知の方がいらっしゃいましたら
教えて頂きたく宜しくお願い致します。

A 回答 (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行ごとに
・印刷範囲を指定
・ヘッダー/フッターを設定
・印刷
を繰り返すようなイメージになるのではないかなぁ、と思います。


以上、何かの参考までにお納めくださいませ。
「Excel2010 VBAにて印刷設定の」の回答画像2
    • good
    • 0
この回答へのお礼

 ご回答ありがとうございました。


> 直接の回答とは言えないことをまずはお詫びしつつ。
 ご丁寧にありがとうございます。
こちらこそご回答を頂きながらお礼が遅くなりまして申し訳ありません。


> 私の頭の中には
> 「全頁の上端・下端に“同じモノ”を印刷する」
> という事がヘッダー・フッターの意義である、というモノがありますので
> (当然、ページ番号などの可変部分は除きます)、
> 質問者さまの
>> 別シートに記述の「ページごとのヘッダー値」
> と言う考え方にはなかなか賛同できずにいます。
>
> 具体的に「ヘッダーフッターの位置にどのように印刷したいのか」がわかれば、
> なんとなくでも策が見いだせるかもしれません。
 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様の仰るように僕の行おうとしていることは
ヘッダーフッターの考え方からずれているのかと思われます。
やはりシートに記述する内容なのもしれません。

お礼日時:2013/09/07 10:53

こんにちは。



取得する目的は?

取得ってできるのかな?
設定は、PrintPutメソッドに引数があるのでできます。
    • good
    • 0
この回答へのお礼

 早々とご回答ありがとうございます。

 目的としましては以下のように印刷時に
別シートに記述してあるページごとのヘッダー、
フッターの内容に入れ替えようと思っております。

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

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

お礼日時:2013/09/06 10:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!