Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2922 / 13644 ツリー ←次へ | 前へ→

【65255】印刷範囲の設定方法について suika 10/4/30(金) 22:32 質問[未読]
【65257】Re:印刷範囲の設定方法について りん 10/5/1(土) 11:46 発言[未読]
【65258】Re:印刷範囲の設定方法について suika 10/5/1(土) 15:36 お礼[未読]

【65255】印刷範囲の設定方法について
質問  suika  - 10/4/30(金) 22:32 -

引用なし
パスワード
   こんにちわ。suikaです。

excel-2007の自動記録機能を使い、シートの印刷範囲設定を行うマクロを
作成しましたが、不要な部分まで印刷されてしまい、困っています。

ページレイアウトのタブにあります、印刷タイトルのタイトル行(R)⇒$1:$1
とし、全てのページの先頭に、列ラベルを表示させます。

更にA4サイズ横向きで、後は、改ページプレビューで印刷範囲の設定を行い
ました。

そうすると、データの行数が全部で625行ある為、PrintArea = "$A$1:$L$625"
となり、このシートでは、問題はありません。

ですが、困ったことに、別のシート(データの行数が全部で約400行ある)で、
この印刷範囲設定マクロを使用しますと、4ページ〜9ページの先頭行に、列
ラベルが表示されてしまいます。
このまま、印刷をかけますと、OA紙が無駄になるので、手動で印刷ページの
指定を行っています。

データの行数に関係なく、全てのページに列ラベルを表示し、A4サイズ横向き
で印刷するには、どのようにコードを記述すればよいか、どなたか分かる方が
いらっしゃいましたら、ご教授をお願いいたします。

コードの最後に記載した印刷設定のコードを抜粋し、下記に掲載します。

1.ページレイアウトのタブにあります、印刷タイトルのタイトル行(R):$1:$1
とし、全てのページの先頭に列ラベルの追加を設定しました。
   ↓
印刷設定(列ラベル追加)を行う。
   With ActiveSheet.PageSetup
    .PrintTitleRows = "$1:$1"
    .PrintTitleColumns = ""
   End With

2.次に、印刷設定(A4サイズ:横向き)を行う。

印刷設定(A4サイズ:横向き)を行う。
   ActiveSheet.PageSetup.PrintArea = ""
   With ActiveSheet.PageSetup
    .LeftHeader = ""
    .CenterHeader = ""
    .RightHeader = ""
    .LeftFooter = ""
    .CenterFooter = ""
    .RightFooter = ""
    .LeftMargin = Application.InchesToPoints(0.196850393700787)
    .RightMargin = Application.InchesToPoints(0.196850393700787)
    .TopMargin = Application.InchesToPoints(0.984251968503937)
    .BottomMargin = Application.InchesToPoints(0.196850393700787)
    .HeaderMargin = Application.InchesToPoints(0.511811023622047)
    .FooterMargin = Application.InchesToPoints(0.511811023622047)
    .PrintHeadings = False
    .PrintGridlines = False
    .PrintComments = xlPrintNoComments
    .CenterHorizontally = False
    .CenterVertically = False
    .Orientation = xlLandscape
    .Draft = False
    .PaperSize = xlPaperA4
    .FirstPageNumber = xlAutomatic
    .Order = xlDownThenOver
    .BlackAndWhite = False
    .Zoom = 100
    .PrintErrors = xlPrintErrorsDisplayed
    .OddAndEvenPagesHeaderFooter = False
    .DifferentFirstPageHeaderFooter = False
    .ScaleWithDocHeaderFooter = True
    .AlignMarginsHeaderFooter = True
    .EvenPage.LeftHeader.Text = ""
    .EvenPage.CenterHeader.Text = ""
    .EvenPage.RightHeader.Text = ""
    .EvenPage.LeftFooter.Text = ""
    .EvenPage.CenterFooter.Text = ""
    .EvenPage.RightFooter.Text = ""
    .FirstPage.LeftHeader.Text = ""
    .FirstPage.CenterHeader.Text = ""
    .FirstPage.RightHeader.Text = ""
    .FirstPage.LeftFooter.Text = ""
    .FirstPage.CenterFooter.Text = ""
    .FirstPage.RightFooter.Text = ""
   End With
   ActiveWindow.View = xlPageBreakPreview
    ActiveSheet.PageSetup.PrintArea = "$A$1:$L$625"
    ActiveSheet.VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
    ActiveWindow.View = xlNormalView
    Range("A1").Select

MsgBox "自動編集終了! 印刷を行ってください"


End Sub

【65257】Re:印刷範囲の設定方法について
発言  りん E-MAIL  - 10/5/1(土) 11:46 -

引用なし
パスワード
   suika さん、こんにちわ。

>こんにちわ。suikaです。

>ですが、困ったことに、別のシート(データの行数が全部で約400行ある)で、
>この印刷範囲設定マクロを使用しますと、4ページ〜9ページの先頭行に、列
>ラベルが表示されてしまいます。
>このまま、印刷をかけますと、OA紙が無駄になるので、手動で印刷ページの
>指定を行っています。

実行するときに行数を判定してみては?

その1
 単純に使用範囲で判定する場合

  With Application.ActiveSheet
    'シートのデータの最下行を印刷範囲の一番したとする
    With .UsedRange
      Rmax = .Cells(.Count).Row
    End With
    '
    .PageSetup.PrintArea = "$A$1:$L$" & Rmax
  End With

その2
 データはないけど書式とか連番とかで使用範囲が必要な部分より大きい場合

  With Application.ActiveSheet
   'データが入っている最下位置を判断する基準列をBとした場合
   Rmax = .Cells(.Rows.Count, "B").End(xlUp).Row
   .PageSetup.PrintArea = "$A$1:$L$" & Rmax
  End With

【65258】Re:印刷範囲の設定方法について
お礼  suika  - 10/5/1(土) 15:36 -

引用なし
パスワード
   ▼りん さん:
こんにちわ。suikaです。

早速のご返信、どうも有難うございます。

りんさんに教えて頂いた、下記2つのコードを私のコードに組み込んで検証して
みました。

検証するに当たり、3通りのサンプルデータを準備しました。
 1.データの行数⇒400行
 2.  〃   ⇒800行
 3.  〃   ⇒1300行

<検証結果>
データの行数に関係なく、印刷範囲がピッタシです。
列ラベルが不要なページに跨っていないので、わざわざ、手作業で印刷ページ数
の指定を行う必要性も、無くなりました。

りんさん、どうも有難うございます。助かりました。

最近、仕事でマクロを使い始めたのですが、右も左も分からない、ど素人の私の
質問に回答して頂き、感謝感激です^^

逆引き辞典で調べたのですが、分からず、ネット検索で色々調べている内に、
このVBA質問箱に辿り着きました。

また、何か分からない事があれば、投稿させて頂きますので、その時は、また
お力をお貸し下さい。本当に、有難うございました。

>
>その1
> 単純に使用範囲で判定する場合
>
>  With Application.ActiveSheet
>    'シートのデータの最下行を印刷範囲の一番したとする
>    With .UsedRange
>      Rmax = .Cells(.Count).Row
>    End With
>    '
>    .PageSetup.PrintArea = "$A$1:$L$" & Rmax
>  End With
>
>その2
> データはないけど書式とか連番とかで使用範囲が必要な部分より大きい場合
>
>  With Application.ActiveSheet
>   'データが入っている最下位置を判断する基準列をBとした場合
>   Rmax = .Cells(.Rows.Count, "B").End(xlUp).Row
>   .PageSetup.PrintArea = "$A$1:$L$" & Rmax
>  End With

2922 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free