1

prntRangeシート名、範囲 ( )、方向 ( ) を取得して結果を印刷するように VBA コードをセットアップしましたが、prntOrientVBA がページ設定のコマンドを無視しているようです。ここに簡単なスニペットがあります:

For x = 1 To numPages
    Worksheets("Printing").Activate
    prntSheet = Cells(6 + (x - 1), 1)
    prntRange = Cells(6 + (x - 1), 2)
    prntOrient = Cells(6 + (x - 1), 3)

    Application.StatusBar = "Printing " & prntSheet & "..."

    Worksheets(prntSheet).Activate
    With ActiveSheet.PageSetup
        .PrintArea = False
        If prntOrient = "Portrait" Then
            .Orientation = xlPortrait
        Else
            .Orientation = xlLandscape
        End If
        .PrintArea = prntRange
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With
    ...

そして、これがテーブルの例です:

Sheet Name        Range        Orientation
 Example          A1:J56         Portrait
 Example          A1:J80         Landscape

prntRangeRange からprntOrientプル、Orientation からプル

基本的に私が探しているのは、Example の範囲の縦向きバージョンと、A1:J56Example の範囲の横向きバージョンですA1:J80。横向きバージョンは、1 ページに収まるように指示されているにもかかわらず、2 ページとして印刷されます。これは、最初のエントリがそこにあるかどうか、および Excel で印刷設定を手動でリセットしたかどうかに関係なく発生します。

上記の 4 つのコマンドのほぼすべての順列を試してみましたが、順序によって違いはないようです。設定.PrintArea = Falseは、印刷領域をリフレッシュするのに役立つかもしれないと思っていましたが、そうではないと思います。これらの手順を手動で行っても、問題なく目的の形式に変換できますが、このマクロの目的は、その必要がないようにすることです。

誰かが私が見逃しているものを知っていますか?

前もって感謝します!

編集:より正確なタイトル。

編集 2: 人々の要求ごとの詳細、申し訳ありません!

編集 3: コードを展開して変数の割り当てを表示する

4

1 に答える 1

0

同様の状況で発生した問題の潜在的な解決策を見つけました。プロセスに追加Application.PrintCommunicationします。

Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .Orientation = xlLandscape
        .Zoom = False
        '.PrintArea = Worksheets(ReportWsName).UsedRange
        .FitToPagesWide = 1
        '.FitToPagesTall = 1
    End With
Application.PrintCommunication = True

なんらかの理由で、Excel を使用せずにコードを実行すると、入力した設定が上書きされます。

于 2014-09-17T08:49:16.280 に答える