Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
改頁の挿入ができません。
投稿日時: 18/03/19 16:18:56
投稿者: y-tani

以下のステップで改ページの挿入ができません。
「改頁」の文字が表れた行に改頁を挿入したいのですが、挿入されません。
どうかご教授をお願い致します。
 
Private Sub Receipt_Print_Sub()
    Dim s7 As String
    Dim sh3 As Worksheet
    Dim Page_ctr As Integer
    Dim PageRow As Integer
    Dim T_Page As Integer
    Dim work3 As String
    'T_Page は、改頁を挿入するカウンター(頁数)
    ActiveSheet.ResetAllPageBreaks
    s7 = Sh3.Range("AH49").Address
    Page_ctr = 1
    PageRow = 49
    Do Until Page_ctr = T_Page
        work3 = Left(Sh3.Range(s7), 2)
        If work3 = "改頁" Then
            Pctr_wk = PageRow + 1
            Sh3.Range("AG" & Pctr_wk & "").PageBreak = xlPageBreakManual
            With Sh3.PageSetup
                .Zoom = False
                .FitToPagesWide = 1
                .FitToPagesTall = Page_ctr
            End With
            ActiveSheet.Range("AG" & Pctr_wk & "").Select
            ActiveSheet.HPageBreaks.Add Before:=ActiveCell
 
            Page_ctr = Page_ctr + 1
        End If
        PageRow = PageRow + 1
        s7 = Sh3.Range(s7).Offset(1).Address
    Loop
End Sub

回答
投稿日時: 18/03/19 16:59:59
投稿者: もこな2

y-tani さんの引用:
以下のステップで改ページの挿入ができません。
「改頁」の文字が表れた行に改頁を挿入したいのですが、挿入されません。
ということですから、とりあえず、既存のコードから改ページ以外の部分を取り去って考えてみてはどうでしょうか?

投稿日時: 18/03/19 17:17:54
投稿者: y-tani

もこな2 さん、早速の回答、ありがとうございます。
説明不足があった様なので、補足させて頂きます。
 
当サブの前ステップにて、あらかじめ設定された印刷範囲がございまして、
その印刷範囲に何ページで印刷するかが、変数「T_Page」に格納されています。
改頁を行う行には「AH」列に「改頁」の文字が入っており、その行に対して改頁を挿入するのが目的です。
例えば、印刷範囲を3頁で印刷したい場合は、「T_Page」には「3」が入って来ております。
「AH」列のどかの行には、事前に「改頁」の文字が2か所入っておりますので、
結果的には改頁が挿入される箇所は2か所となり、その行に挿入したい訳です。
上記説明でご理解できるかどうか?
よって、ご教授のあった「改頁」以外のステップを取り去るという事は出来ない様な気がするのですが。
至りませんで、申し訳ございません。

回答
投稿日時: 18/03/19 17:18:36
投稿者: Suzu

こんにちは。
 
【ワークシートで改ページを挿入、移動、削除する】
https://support.office.com/ja-jp/article/%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B7%E3%83%BC%E3%83%88%E3%81%A7%E6%94%B9%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%E6%8C%BF%E5%85%A5%E3%80%81%E7%A7%BB%E5%8B%95%E3%80%81%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B-ad3dc726-beec-4a4c-861f-ed640612bdc2
 

引用:
手動改ページを使用するには、代わりにスケーリングを [拡大/縮小] に変更します。

 
 
            With Sh3.PageSetup 
                .Zoom = False 

 
これでは、拡大縮小扱いになりませんよ。

回答
投稿日時: 18/03/19 17:24:17
投稿者: WinArrow
投稿者のウェブサイトに移動

質問
 
sh3

Activesheet
の両方で記述していますが、同じシートですか?
sh3は、どこでセットしているんでしょう?
使い分けている理由は?
 
T_Pageは、どこでセットしているんでしょうか?
 

引用:
With Sh3.PageSetup
                 .Zoom = False
                 .FitToPagesWide = 1
                 .FitToPagesTall = Page_ctr
             End With

この部分は、ループの中で実行しなくてはいけないのですか?

回答
投稿日時: 18/03/19 17:26:55
投稿者: もこな2

ごめんなさい。私にはやりたいことがピンとこなかったです。
改ページを手動で入れる”だけ”ならこんな感じだとおもいますが。。。

Private Sub Sample()
    Dim i As Long

    With ActiveSheet
        'アクティブシートの改ページをリセット
        .ResetAllPageBreaks

        '2行目から、シートの最終使用行を順番に・・
        For i = 2 To .UsedRange.Rows(.UsedRange.Rows.Count).Row

            'AH列に「改頁」を含む文字列が入力されているセルがあったら、
            'そのセルを起点に改ページ挿入
            If .Cells(i, "AH").Value Like "改頁" Then
                .Cells(i, "AH").PageBreak = xlPageBreakManual
            End If

        Next i
    End With
End Sub

回答
投稿日時: 18/03/19 17:32:29
投稿者: WinArrow
投稿者のウェブサイトに移動

>その印刷範囲に何ページで印刷するかが、変数「T_Page」に格納されています。
このプロシジャ内で定義している変数には、別プロシジャでで代入できないので
本当に格納されているのですか?
sh3もしかり、
 

投稿日時: 18/03/19 17:39:38
投稿者: y-tani

もこな2 さん、ご教授ありがとうございます。
余り詳しくないのでご教授願いたいのですが。
 
改頁の挿入はこれでよろしい様な気がするのですが、
印刷範囲を所定のページ数(「T_Page」に格納されている、今回の例で言えば縮小して)で
印刷する場合は、どの様なステップが必要でしょうか?

回答
投稿日時: 18/03/19 17:44:37
投稿者: WinArrow
投稿者のウェブサイトに移動

y-tani さんの引用:
もこな2 さん、ご教授ありがとうございます。
余り詳しくないのでご教授願いたいのですが。
 
改頁の挿入はこれでよろしい様な気がするのですが、
印刷範囲を所定のページ数(「T_Page」に格納されている、今回の例で言えば縮小して)で
印刷する場合は、どの様なステップが必要でしょうか?

 
「変数のスコープ」を勉強しましょう。

回答
投稿日時: 18/03/20 18:18:59
投稿者: もこな2

y-tani さんの引用:
余り詳しくないのでご教授願いたいのですが。

いや、むしろ、提示のコードがどのような動きを想定(期待)して書かれているのか、私の方が理解できてないので、そっちを説明してほしいです。
 
タイトルから想像するに、改ページを挿入したいという話かとおもったんですが、なんか違うようですけど・・

回答
投稿日時: 18/03/20 19:47:40
投稿者: WinArrow
投稿者のウェブサイトに移動

>印刷範囲を所定のページ数(「T_Page」に格納されている
 この認識が非常に怪しい??
  
ステップ実行で
本当に格納されているか確認していますか?
  
プロシジャー内で定義した変数に、他プロシジャで値を格納することはできない。
プロシジャ間で変数を共有する場合は、
モジュールレベルで変数を定義する必要があります。
 
モジュールレベルで定義した変数と同名の変数をプロシジャ内に定義した場合、
 プロシジャ内で定義した変数が優先する。
 
つまり、変数のスコープ(適用範囲)を理解しているのかな?
  
  

回答
投稿日時: 18/03/21 13:08:44
投稿者: mattuwan44

>「改頁」の文字が表れた行に改頁を挿入したいのですが、挿入されません。
FitToPagesTallプロパティを設定したら、手動で改ページは入れられなさそうですよ?
 
Sub test()
'
'
    With ActiveSheet.PageSetup
        .Zoom = False
        .FitToPagesTall = 5
    End With
End Sub
 
FitToPagesTallプロパティは、
 
FitToPagesTall = 5
とした場合、データが2ページ分しかなければそのまま2ページ
データが5ページを超える場合は5ページに収まるよう縮小されるようです。
 
部分部分を切り出して、どこがまずいかを把握しましょう。
 
多分もっと素直に記述できるはずですよね?
 
1)印刷範囲の解除
2)改ページの解除
3)印刷範囲の設定(全部なら不要?)
4)アクティブなシートの使っているセル範囲の内の1列目のセルを上から順にみて、
5)もし、セルの値が「改頁」なら改行挿入
6)次へ
 
不要な記述が多すぎませんか?
設定したいのは、この程度のことだと思いますがいかがでしょう。
 
Sub Macro1()
    Dim c As Range
 
    With ActiveSheet
        '1)印刷範囲の解除
        .PageSetup.PrintArea = ""
        '2)改ページの解除
        .ResetAllPageBreaks
        '4)アクティブなシートの使っているセル範囲の内のAH列目のセルを上から順にみて、
        For Each c In Intersect(.UsedRange, .Range("AH:AH")).Cells
            '5)もし、セルの値が「改頁」なら改行挿入
            If c.Value = "改頁" Then
                .HPageBreaks.Add c.Offset(1)
            End If
            '6)次へ
        Next
    End With
End Sub

投稿日時: 18/04/15 07:44:43
投稿者: y-tani

回答が遅くなり、誠に申し訳ございませんでした。
その後、皆さんの親切なアドバイスを参考に色々と試し完成する事ができました。
ありがとうございました。
解決済みとさせて頂きます。