dポイントプレゼントキャンペーン実施中!

Excel2003のマクロで、

Sub Auto_Open()
ActiveSheet.DisplayAutomaticPageBreaks = True
End Sub

としているのですが、起動時に開くシートにしか適用されません。
ページが増えていくのでブック内の全シートに適用するにはどうしたらいいでしょうか?

A 回答 (10件)

>#4のみのコードよだと条件により何回も点滅するから、今回の#8にあるコードのみのほうが良い。

という事でしょうか?

そんなことを書いていませんが。
ご質問者さんが、ひとつずつ、試してみてみればよいのでは?

ただ、シートをループルして、その都度、Activate したら、Workbook_SheetActivateのイベントが起動するということです。しかし私の#8のマクロは、シートをActivate していませんから、#4で書いたコードは起動しませんが、別に、共有して使ってもらうとか、別々に使ってもらうということを目的として書いていません。単に、merlionXXさんのコードで、ご質問者さんが、不具合があると続けて書いているから書いたまでです。

それと、こちらが#8で聞いた事は、前のログを読めということですね。そうすると、少し話しが違ってくるけれども、実際に、改ページプレビューというものがあるのにも関わらず、それを好まず仕様自体を変更するような話は、一般性がありませんから、概ね、解決は難しいと思います。あちらを直せば、こちらが問題だと次から次に問題が出てきてしまいます。出来れば、改ページプレビューに慣れて使いこなせば、それはそれでよいのではないかと思います。それに、本来、全シートではなく、その都度、ActiveSheet だけが分かれば良いし、その時に、画面が一回程度の点滅で、どんな問題があるのか、私個人としては理解できません。それは、もうMS側の仕様そのものの問題になるのではないか、というのが、あえて答えれば、前の質問の回答となってしまいます。

なお、
ActiveSheet.DisplayAutomaticPageBreaks = True
の、DisplayAutomaticPageBreaksは、Excel Ver.5 のプロパティで、Excel97 以上では隠しプロパティです。不具合はないにしても、ヘルプでは出てこないはずです。

だから、改ページブレイクを入れるために、現在のプロパティのDisplayPageBreaks を試してみたらどうでしょうか。

違う環境やそのシートの内容によって、挙動は変わります。こちらが、どれがどうとか指図する話ではありません。もともと、印刷プレビューや印刷の後に現れる改ページブレイクです。私なら、まず、印刷プレビューで見てみます。それをせず、改ページブレイクを人為的に出すというわけであるわけですが、また、同時に、シートを複数みるわけではありませんから、また、一気に設定するという必要性を感じていません。

ともかく、それぞれを試していただくのが良いと思うのですが。ただ、期待はしないほうがよいと思います。

この回答への補足

DisplayAutomaticPageBreaksで何十回も点滅して使い物にならない
以下のようにして試してみたらどうでしょうか
と言っているので#8のほうが良いのかと聞いたのです。

> 画面が一回程度の点滅で、どんな問題があるのか

問題あるとは言ってません。
#4の方法にしようと思ったのですが#8のコードが出てきたので、
#8のほうが良いのかと聞いたのです。

#4の時点で、「望む事ができました」と書いていて、#3のコードは
起動時に動作するとあるのに、こちらでは#4と同じシートごとに動作するという話をしていたら、#8のコードが出てきたのです。

補足日時:2009/07/24 13:53
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/27 13:58

> だけ記述しているのに、起動後のシート切り替えで動いているのです。



それでしたら、わたしの2000では再現できませんので原因がわかりません。
澄みませんがお役に立てません。
    • good
    • 0

こんにちは。



#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さんのコードとは、共有するものではありません。

この回答への補足

オプションで改ページにチェックを入れて保存終了しても、次の起動時には
チェックが外れてしまいます。
それでマクロで起動時に入れていました。
http://okwave.jp/qa5086876.html
それで今回は複数のシートも含めて行いたいという事です。

#3と#4のコードは共有していません。
それぞれで試しています。

#4のみのコードよだと条件により何回も点滅するから、今回の#8にあるコードのみのほうが良い。という事でしょうか?

補足日時:2009/07/24 11:17
    • good
    • 0

> Auto_Openなら起動時だけですよね?



はいそうです。
それ以外に働いているとしたら、Wendy02さんのコードも同じBOOKに書いてあるのではないですか?

この回答への補足

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

を記述しています。
どちらも全く同じ動作をしています。

補足日時:2009/07/24 10:44
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/24 11:38

> シートを開くと再表示されたように画面が1回点滅します。



はい、Application.ScreenUpdating = True の段階でそうなると思います。

> 別のシートに移って同じシートに戻ると何も起きません。

これは、再起動ではなく単に他のシートを選択してから戻ったという意味でしょうか?
ならば、もうAuto_Open時のマクロは関係ないので何もおきないです。

この回答への補足

> シートを開くと再表示されたように画面が1回点滅します。

これは起動したあとにアクティブ以外のシートを選択した時です。
Auto_Openなら起動時だけですよね?

補足日時:2009/07/23 17:43
    • good
    • 0

merlionXXです。



> 起動時に全てではなくシートを開くごとに動いているようですね。

Wendy02さんのはそのとおりですが、わたしのは起動時にすべて行っています。初めて開くときと2回目に開くときでどう挙動が違うのか知りたいです。

ただ、最初にアクティブシートを取得し、一巡して最後にまたそのアクティブシートを選択させてますので開いたときのアクティブシートが違えば挙動も変わるでしょうけど。

この回答への補足

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

もしかしたら、最初の件のようにバージョンで違うのでしょうか。

補足日時:2009/07/23 16:42
    • good
    • 0

こんにちは。



>画面表示でシートが変わっていくのですが、アクティブシートを表示したまま
>他のシートに適用することは可能でしょうか?
確認しました。

画面を止めておく方法では、
#3のmerlionXX さんの
Application.ScreenUpdating = False
ループするしかないようですね。

ただ、こんな方法もあるかと思います。

Auto_Open で、
ActiveSheet.DisplayAutomaticPageBreaks = True

とだけにしておいて、他は、

ThisWorkbook モジュールで、シートを開くたびに、改ページブレークを入れるようにする方法もあると思います。

'-------------------------------------------
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
 Sh.DisplayAutomaticPageBreaks = True
End Sub

'-------------------------------------------

このようにする方法もあるかと思います。シートを増やしても同様につくはずです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/23 16:17

変ですね、わたしの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
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/23 16:15

> 画面表示でシートが変わっていくのですが、アクティブシートを表示したまま


> 他のシートに適用することは可能でしょうか?

わたしが回答したコードだけではそんなことは起きないと思います。
コードに何か書き加えてないですか?

この回答への補足

1シート目から順番に表示されていき、最後は保存時のアクティブシートに
表示が戻って止まります。

下記の記述になっています。

Sub Auto_Open()

For Each ws In Worksheets
ws.DisplayAutomaticPageBreaks = True
Next

End Sub

補足日時:2009/07/23 14:18
    • good
    • 0

Sub Auto_Open()


For Each ws In Worksheets
ws.DisplayAutomaticPageBreaks = True
Next
End Sub

では?

この回答への補足

ありがとうございます。
全ページ出来ました。

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

補足日時:2009/07/23 12:57
    • good
    • 0

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