[[20230308105355]] 『縦列を1ページにした場合の拡大縮小率の取得』(りりん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『縦列を1ページにした場合の拡大縮小率の取得』(りりん)

印刷設定で列を1ページにして、行は自動で改ページにしたい場合に

Sub 印刷設定()

    With ActiveSheet.PageSetup
        .Orientation = xlPortrait '印刷向きを縦方向に設定
        .Zoom = False '拡大縮小を設定(しない)
        .FitToPagesWide = 1 'すべての列を1ページに印刷
        .FitToPagesTall = False 'シートを1ページに印刷
    End With
End Sub

で設定しているのですが、この際拡大縮小は自動で何%かに変更されます。
その時の拡大縮小率を取得したいのですが、

a = ActiveSheet.PageSetup.Zoom

としても、印刷設定後ではa=0としか取得できません。

解決方法をご教示願います。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 ご自身でFalseを設定しているから0になるのでは?
(.:*.ゆ ゅ) 2023/03/08(水) 11:04:25

実際に数字が入るのは列を1ページにした後なのでこの時点で設定が出来ません。
Trueにしてもエラーが出ます。
(りりん) 2023/03/08(水) 11:16:26

 ZoomをFalseにしないと、FitToほにゃららは有効にならず
 一度設定すると、FitToほにゃららをFalseに設定してもZoomは有効にならない。
 Zoomを有効にするには、Zoomに値を入れなければならないけど、その倍率を
 FitToほにゃららで取得したいが、できない

https://daitaideit.com/vba-zoom-fittopageswide/

 いくつか試したけどできなかったす。
 上のURL内で、TEST4ってコードで改ページギリギリまで拡大するみたいなやつあるからそれでやってみてはどうだろうか?

 1)FitToほにゃららでページ数を取得する
 2)Zoomを100にする
 3)1)で取得したページ数になるまで、拡大or縮小する
 みたいな流れでできそう。
(稲葉) 2023/03/08(水) 11:30:26

 書いていたら衝突しましたが。
 そもそも手動操作でもページ設定するとズーム倍率のところがグレーアウトしますよね。
 あとPageSetup.Zoomのプロパティ上、Trueは設定できないのでエラーになるのは当然です。
 どういった理由で倍率を取得したいのか分かりませんが、仕様上そういうつくりになっていないです。
(.:*.ゆ ゅ) 2023/03/08(水) 11:39:44

とある集計表があり、各製品ごとに下段に集計行として3行ずつ挿入されています。

VBAにて自動改ページ行にその集計行があった場合には集計行の下に改ページを移動するようにしたのですが、
その結果、自動改ページの直下に1,2行の集計行の切れ端が残ってしまう事態になっています。

そのため、その時点での縮小率を取得し、その縮小率からさらに1%縮小した値を与えることでフィッティングさせようかと考えました。

ですが上記の様に列を1ページに変更させたときの縮小率を取得できない為困っています。
(りりん) 2023/03/08(水) 11:50:16


 >VBAにて自動改ページ行にその集計行があった場合には集計行の下に改ページを移動するようにしたのですが、
 ここも含めて一連のコードをUPしてもらった方が話が早そうな気がします
 切れ端が残る(?)のイメージが全くつかないので……
(.:*.ゆ ゅ) 2023/03/08(水) 11:56:55

 2016で一応動いているように見えますが、どうでしょう
 ページ設定が反映されるのは、   
 Application.PrintCommunication が False から True に切り替わる時みたいなので、いちいち切り替える
 すぐに反映されないみたいなので、DoEvents 挟みまくる

    Sub sample()
        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .FitToPagesWide = 1
            .FitToPagesTall = False
        End With
        Application.PrintCommunication = True
        DoEvents: DoEvents: DoEvents             ' ここ大事
        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .FitToPagesWide = False
            .FitToPagesTall = False
        End With
        Application.PrintCommunication = True
        MsgBox ActiveSheet.PageSetup.Zoom
    End Sub
(´・ω・`) 2023/03/08(水) 12:01:37

 (´・ω・`)さんのコードでとれた・・・
 >(稲葉) 2023/03/08(水) 11:30:26
 >一度設定すると、FitToほにゃららをFalseに設定してもZoomは有効にならない。
 ってすぐに反映されてなかっただけ・・・?
(稲葉) 2023/03/08(水) 12:14:34

 ステップ実行でやるとうまくいくので、
 こういうときは DoEvents ってやってみたらたまたまできたという感じです

 文字通り、プリンタと情報をやりとりする時間的余裕をExcel.Applicationにくれてやらないと
 ダメだということなのかなぁと思います

 こういう環境依存のコードは使わない方が安心安全なので、
 .:*.ゆ ゅのアドバイスに従って、改ページを入れるコードを見直すのがよいと思います。

 切れ端ってなんですかね?
(´・ω・`) 2023/03/08(水) 12:31:42

 自分でアドバイスした手前、作ってたんですが、Pages.Countも
 1枚だったり10枚だったりまったくあてにならなかったんですよね・・・
 Application.PrintCommunication = True 連打しまくったり、
 With一度切り離してみたり・・・

 切れ端は罫線とかじゃないですかね?
 欄外の罫線なしにしておけば、大丈夫かも?
 あと幅が0のシェイプとかも画面上だと見えないので厄介だったりします・・・

(稲葉) 2023/03/08(水) 12:43:17


 .:*.ゆ ゅさんが呼び捨てになってしまってました。 すみません

 切れ端については、質問者さんからの情報待ちで。
(´・ω・`) 2023/03/08(水) 12:48:15

 こんばんは!
先日私も似た様状況になったんですけど、その時は、まず
1.印刷範囲を決めます。
2.倍率のところは手動でTRUEにしておきます。
そうすると出来ました。

 コードの中でTRUEしようとしても出来ませんでした。

 何かの参考になれば幸いです。
では、では、
(SoulMan) 2023/03/08(水) 21:15:15

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.