アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルマクロにて
A4等用紙サイズに合わせて縦横1×1のオートフィット印刷をするものを組みました。
用紙サイズからオーバーするものは縮小
用紙サイズより小さいものは1×1をオーバーするまで400%を上限に拡大を行いました。

mysheet.HPageBreaks.count >= 1 or mysheet.VPageBreaks.count >=1 _
or mysheet.PageSetup.Zoom>=400 
(省略していますが400%になるまで100%から10%ずつ拡大する処理をさせています)

参考本から上記の条件式を採用し、正常に動作するか確認したところ、どうやら、印刷範囲の設定が実施されているファイル・シートについては、
サイズ内で収まっている場合、拡大処理ループとなり、
10%ずつ拡大させていきますが、
PageBreaks.count が0 を指したままになり、増加せず上限400%までループ処理をしてしまいます。
サイズ内に収まっていないものは縮小処理なので、正常動作します。
アドインでツールバーにボタン化させ、色々なエクセルファイルに利用したいので、他ユーザーの設定した、印刷範囲の設定をクリアする訳にもいきません。
PageBreaks.countを使う以外でも何か良い方法があれば幅広く教えて頂ければと思います。
印刷ページ総枚数が2枚になったらループ処理をやめるとかでもいいのですけど。
また、印刷範囲の設定とは、関わりが無く他に問題があるではないかとも疑っていますが、とりあえず設定をクリアしたら、countがきちんと増えて、うまく動作したので、やはり個人的には印刷範囲の設定が一番あやしいと思っています。

windowsXp,excel2003です。
初投稿となります。質問の仕方が下手ですが、ぜひお力をお貸しいただければと思います。

A 回答 (4件)

> とりあえず400%に拡大させて、改ページプレビューで1×1を状態に


> することで、400%から適当な拡大サイズに変更させる処理...

そのとおりです。

> エラーとなるケースが頻発します。

On Error Resume Next としてエラーを無視させてますのでエラーで、停止
することはないはずです。
期待したとおりの動作にならない...ということをエラーと表現されたので
しょうか?

  > .VPageBreaks(1).DragOff xlToRight,1

上記の書き方をみると、私が提示したコードをそのまま試されているわけ
ではなさそうです。Excel2002 環境でテストした限り、問題はなさそう
なので、ご自分で書かれたコードの提示、シート内のデータの状況などの
説明がなければ何とも言えません。

このような再質問でしたら、まずは私が提示したものが正常に動作するか
確認し、その結果を教えて下さい。

> Vが垂直方向、Hが水平方向のような気がするのですが、

そのとおりです。

> そうすると xlToRightとxlDownが反対って単純に思ってしまいました。

垂直と水平のとらえ方が逆です。
改ページプレビューにして試してみてください。垂直改ページ(縦の線)は
左右に動かし、水平改ページ(横の線)は上下に動かします。
    • good
    • 0
この回答へのお礼

大変失礼しました。
完全に『On Error Resume Next』を見落としのまま作業してしまいました。
ご指摘のとおり、 『On Error Resume Next』を記述した結果、思い通りの動作を確認することができました。色々と質問の不手際もありながら、親切にご回答してもらえたことに感謝いたします!。

実は、コード作成・実行は会社のパソコンで実施。セキュリティ上そのデータを社外持ち出せず、また掲示板への書き込みも禁止されていることから、家から別のパソコンで質問させてもらっていたため、質問に具体的なコードがしずらかったため。大変ご迷惑おかけしました。

>.VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
の記述をそのまま当初引用させてもらったのですが、
「RegionIndex:=1」⇒「regionIndex:=1」とコード認識ができていないようだったので、VBAヘルプの記述を参考にして、変更させて利用させてもらいました。

改ページの水平、垂直方向のご回答もなるほどと理解することができ、大変勉強になりました。

今後も機会がありましたら、また親切なご回答よろしくお願いします。次回は、コード等もきちんと提示して質問できるような形をとりたいと思います。お手数おかけしました。感謝!

お礼日時:2007/09/14 23:16

何度か試すとうまくいかない場合がありましたので、#2 のコードを一部


訂正いたします。

' // DragOffを使うため改ページプレビュー表示モードにする
ActiveWindow.View = xlPageBreakPreview

      ↓訂正

' // DragOffを使うため改ページプレビュー表示モードにする
ActiveWindow.View = xlNormalView
ActiveWindow.View = xlPageBreakPreview
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
難しいので、少し追加で教えてください。
要は、とりあえず400%に拡大させて、改ページプレビューで1×1を状態にすることで、400%から適当な拡大サイズに変更させる処理と見てよろしいでしょうか?

それと
.VPageBreaks(1).DragOff xlToRight,1
.HPageBreaks(1).DragOff xlDown,1
と入力しましたが、エラーとなるケースが頻発します。この2行の順序を並び替えたりもしましたが、1行目でエラーとなるケースがほとんどです。しかし、エラーとならず思ったとおりの処理になることもあるので、何が悪いのか判断がつかずにいます。縦方向は1ページ分なのに横方向は2ページ状態でエラー、、、またその反対と、、、

追加で教えてもらえると幸いなのですが、Vが垂直方向、Hが水平方向のような気がするのですが、そうするとxlToRightとxlDownが反対って単純に思ってしまいました。基本的に素人が本を読みながら独学で、作っていますので、ヘルプで確認しましたがどうも理解しづらいのです。
もし、よろしければご面倒ですが、噛み砕いた説明、もしくは参考サイト等アドバイス頂ければとおもいます。引き続きになりもうしわけございません。

お礼日時:2007/09/13 23:33

> 途中のプレビューを見せたくないと思っています。



Application.ScreenUpdating = False にしてしまえば良いと思います。
ご質問分にあるものとは多少ロジックが異なりますが、こんな感じで
できるかと....

Sub MaxSizePrint()

  Dim lViewModeBackup As XlWindowView
    
  On Error Resume Next
  ' // 現在の表示モードを退避しておく
  lViewModeBackup = ActiveWindow.View
  ' // 画面の動きをユーザーには見せない
  Application.ScreenUpdating = False
  With ActiveSheet
    ' // とりあえず Excelで指定可能な最大印刷倍率にする
    .PageSetup.Zoom = 400
    ' // DragOffを使うため改ページプレビュー表示モードにする
    ActiveWindow.View = xlPageBreakPreview
    ' // 改ページを印刷領域の外にドラッグ
    .VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
    .HPageBreaks(1).DragOff Direction:=xlDown, RegionIndex:=1
    ' // 表示モードを元に戻す
    ActiveWindow.View = lViewModeBackup
  End With
  
  ' // 印刷処理等をここで

  Application.ScreenUpdating = True

End Sub

<<参考: [DragOff メソッド] Excel VBA へプル引用>>
このメソッドは、マクロ記録機能用です (適用できるのは、表示が改ページ
プレビューのときだけです)。
    • good
    • 0

> PageBreaks.count が0 を指したままになり、増加せず上限400%まで


> ループ処理をしてしまいます。

Zoom プロパティーを更新したあと、改ページプレビューを実行するなどして
Excel に印刷レイアウトを再計算させない限り、HPageBreaks や VPageBreaks
の Count プロパティーは更新されないようです。

> とりあえず設定をクリアしたら、countがきちんと増えて...

上記推論の根拠のひとつです。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
やはりそうなのですね。

>改ページプレビューを実行するなど
ユーザーへはボタン押したらノンストップで印刷まで持っていき、
途中のプレビューを見せたくないと思っています。
「など」ということだったのでその他に、良い手段をご存知であれば
引き続き回答いただければ幸いです

お礼日時:2007/09/12 22:18

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

このQ&Aを見た人はこんなQ&Aも見ています