• 締切済み

Auto_Openマクロ

Excel2003のマクロで、 Sub Auto_Open() ActiveSheet.DisplayAutomaticPageBreaks = True End Sub としているのですが、起動時に開くシートにしか適用されません。 ページが増えていくのでブック内の全シートに適用するにはどうしたらいいでしょうか?

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.10

>#4のみのコードよだと条件により何回も点滅するから、今回の#8にあるコードのみのほうが良い。という事でしょうか? そんなことを書いていませんが。 ご質問者さんが、ひとつずつ、試してみてみればよいのでは? ただ、シートをループルして、その都度、Activate したら、Workbook_SheetActivateのイベントが起動するということです。しかし私の#8のマクロは、シートをActivate していませんから、#4で書いたコードは起動しませんが、別に、共有して使ってもらうとか、別々に使ってもらうということを目的として書いていません。単に、merlionXXさんのコードで、ご質問者さんが、不具合があると続けて書いているから書いたまでです。 それと、こちらが#8で聞いた事は、前のログを読めということですね。そうすると、少し話しが違ってくるけれども、実際に、改ページプレビューというものがあるのにも関わらず、それを好まず仕様自体を変更するような話は、一般性がありませんから、概ね、解決は難しいと思います。あちらを直せば、こちらが問題だと次から次に問題が出てきてしまいます。出来れば、改ページプレビューに慣れて使いこなせば、それはそれでよいのではないかと思います。それに、本来、全シートではなく、その都度、ActiveSheet だけが分かれば良いし、その時に、画面が一回程度の点滅で、どんな問題があるのか、私個人としては理解できません。それは、もうMS側の仕様そのものの問題になるのではないか、というのが、あえて答えれば、前の質問の回答となってしまいます。 なお、 ActiveSheet.DisplayAutomaticPageBreaks = True の、DisplayAutomaticPageBreaksは、Excel Ver.5 のプロパティで、Excel97 以上では隠しプロパティです。不具合はないにしても、ヘルプでは出てこないはずです。 だから、改ページブレイクを入れるために、現在のプロパティのDisplayPageBreaks を試してみたらどうでしょうか。 違う環境やそのシートの内容によって、挙動は変わります。こちらが、どれがどうとか指図する話ではありません。もともと、印刷プレビューや印刷の後に現れる改ページブレイクです。私なら、まず、印刷プレビューで見てみます。それをせず、改ページブレイクを人為的に出すというわけであるわけですが、また、同時に、シートを複数みるわけではありませんから、また、一気に設定するという必要性を感じていません。 ともかく、それぞれを試していただくのが良いと思うのですが。ただ、期待はしないほうがよいと思います。

maki12
質問者

お礼

補足を書きましたが反応がないので、解決していませんが締めます。

maki12
質問者

補足

DisplayAutomaticPageBreaksで何十回も点滅して使い物にならない 以下のようにして試してみたらどうでしょうか と言っているので#8のほうが良いのかと聞いたのです。 > 画面が一回程度の点滅で、どんな問題があるのか 問題あるとは言ってません。 #4の方法にしようと思ったのですが#8のコードが出てきたので、 #8のほうが良いのかと聞いたのです。 #4の時点で、「望む事ができました」と書いていて、#3のコードは 起動時に動作するとあるのに、こちらでは#4と同じシートごとに動作するという話をしていたら、#8のコードが出てきたのです。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.9

> だけ記述しているのに、起動後のシート切り替えで動いているのです。 それでしたら、わたしの2000では再現できませんので原因がわかりません。 澄みませんがお役に立てません。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.8

こんにちは。 #4の回答者です。 やり取りをみていて、一体、本来の目的は何のためだったのでしょうか?分かりきったつもりで、読んでいたのてずが、良く考えてみると、最初の質問のコードは、記録マクロで取ったものからではありませんか? それは、印刷や印刷プレビュー後に改ページブレイクを表示するためのものですが、本来、オプションの表示で設定するものです。オプションで入れていれば、あえて、マクロの必要はないとは思うのです。DisplayAutomaticPageBreaks ActiveSheet の画面を再取得して、改ページブレイクを表示しています。とうぜん、画面を再取得しているから、画面が点滅はしますが、それは、一回とは限りません。取得以後は、変化しません。 こちらで、特殊な数式を入れたシートのあるブックで、DisplayAutomaticPageBreaks を入れて、ループでブックのシート全体を試してみましたが、何十回も点滅して使えるものではありませんでした。 もし、単に、改ページブレイクを入れるためでしたら、DisplayPageBreaks を以下のようにして試してみたらどうでしょうか。 '------------------------------------------- Sub Auto_Open() Dim sh As Object For Each sh In ThisWorkbook.Worksheets  sh.DisplayPageBreaks = True Next End Sub '------------------------------------------- >Wendy02さんのコードも同じBOOKに書いてあるのではないですか? なお、#4 のWorkbook_SheetActivateの私のコードは、コメントブロックするか削除してください。melionXXさんのコードとは、共有するものではありません。

maki12
質問者

補足

オプションで改ページにチェックを入れて保存終了しても、次の起動時には チェックが外れてしまいます。 それでマクロで起動時に入れていました。 http://okwave.jp/qa5086876.html それで今回は複数のシートも含めて行いたいという事です。 #3と#4のコードは共有していません。 それぞれで試しています。 #4のみのコードよだと条件により何回も点滅するから、今回の#8にあるコードのみのほうが良い。という事でしょうか?

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.7

> Auto_Openなら起動時だけですよね? はいそうです。 それ以外に働いているとしたら、Wendy02さんのコードも同じBOOKに書いてあるのではないですか?

maki12
質問者

お礼

#3と#4のコードは別ファイルでそれぞれ試していますので、 同じブックには存在していません。

maki12
質問者

補足

Sub Auto_Open() Set ac = ActiveSheet Application.ScreenUpdating = False For Each ws In Worksheets ws.DisplayAutomaticPageBreaks = True Next ac.Activate Application.ScreenUpdating = True End Sub だけ記述しているのに、起動後のシート切り替えで動いているのです。 #4のほうは、 Sub Auto_Open() ActiveSheet.DisplayAutomaticPageBreaks = True End Sub と、ThisWorkBookに Private Sub Workbook_SheetActivate(ByVal Sh As Object)  Sh.DisplayAutomaticPageBreaks = True End Sub を記述しています。 どちらも全く同じ動作をしています。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.6

> シートを開くと再表示されたように画面が1回点滅します。 はい、Application.ScreenUpdating = True の段階でそうなると思います。 > 別のシートに移って同じシートに戻ると何も起きません。 これは、再起動ではなく単に他のシートを選択してから戻ったという意味でしょうか? ならば、もうAuto_Open時のマクロは関係ないので何もおきないです。

maki12
質問者

補足

> シートを開くと再表示されたように画面が1回点滅します。 これは起動したあとにアクティブ以外のシートを選択した時です。 Auto_Openなら起動時だけですよね?

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

merlionXXです。 > 起動時に全てではなくシートを開くごとに動いているようですね。 Wendy02さんのはそのとおりですが、わたしのは起動時にすべて行っています。初めて開くときと2回目に開くときでどう挙動が違うのか知りたいです。 ただ、最初にアクティブシートを取得し、一巡して最後にまたそのアクティブシートを選択させてますので開いたときのアクティブシートが違えば挙動も変わるでしょうけど。

maki12
質問者

補足

シートを開くと再表示されたように画面が1回点滅します。 別のシートに移って同じシートに戻ると何も起きません。 #4のコードを書いた方法と動作が一緒です。 もしかしたら、最初の件のようにバージョンで違うのでしょうか。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 >画面表示でシートが変わっていくのですが、アクティブシートを表示したまま >他のシートに適用することは可能でしょうか? 確認しました。 画面を止めておく方法では、 #3のmerlionXX さんの Application.ScreenUpdating = False ループするしかないようですね。 ただ、こんな方法もあるかと思います。 Auto_Open で、 ActiveSheet.DisplayAutomaticPageBreaks = True とだけにしておいて、他は、 ThisWorkbook モジュールで、シートを開くたびに、改ページブレークを入れるようにする方法もあると思います。 '------------------------------------------- Private Sub Workbook_SheetActivate(ByVal Sh As Object)  Sh.DisplayAutomaticPageBreaks = True End Sub '------------------------------------------- このようにする方法もあるかと思います。シートを増やしても同様につくはずです。

maki12
質問者

お礼

こちらも試してみました。 動作的には#3と同じで、こちらも望む事が出来ました。 ありがとうございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

変ですね、わたしの2000ではそうならないのですが・・・。 ではこのようにしてみてください。 Sub Auto_Open() Set ac = ActiveSheet Application.ScreenUpdating = False For Each ws In Worksheets ws.DisplayAutomaticPageBreaks = True Next ac.Activate Application.ScreenUpdating = True End Sub

maki12
質問者

お礼

1つのシートを初めて開くときと2回目に開くときで少し挙動が違っているので、 起動時に全てではなくシートを開くごとに動いているようですね。 これで望む事が出来ました。 ありがとうございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> 画面表示でシートが変わっていくのですが、アクティブシートを表示したまま > 他のシートに適用することは可能でしょうか? わたしが回答したコードだけではそんなことは起きないと思います。 コードに何か書き加えてないですか?

maki12
質問者

補足

1シート目から順番に表示されていき、最後は保存時のアクティブシートに 表示が戻って止まります。 下記の記述になっています。 Sub Auto_Open() For Each ws In Worksheets ws.DisplayAutomaticPageBreaks = True Next End Sub

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

Sub Auto_Open() For Each ws In Worksheets ws.DisplayAutomaticPageBreaks = True Next End Sub では?

maki12
質問者

補足

ありがとうございます。 全ページ出来ました。 画面表示でシートが変わっていくのですが、アクティブシートを表示したまま 他のシートに適用することは可能でしょうか?

関連するQ&A