• 締切済み

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

  • Sub Auto_Open() 実行されない

    Excel2003VBAについて教えてください。 あるBookから、VBAの”Workbooks.Open”で別のブックを開くように作ってあるのですが、開かれるBookのほうに”Sub Auto_Open()”で特定のシートをアクティブにするように作っています。 普通にBookを開くとSub Auto_Open()は実行されますが、”Workbooks.Open”では実行されません。 ”Workbooks.Open”で開いたときに、特定のシートがアクティブになればそれでよいのですが。 よろしくお願いします。

  • エクセルのマクロをブック全体に

    マクロに関してはずぶの素人です、Q&Aのサイトで目的にかなったものを見つけ 設定したら結果は満足するものでした。 「シートを保護した状態で、グループ化の表示・非表示を切り替えるマクロ」 Sub Auto_Open() With Worksheets("Sheet1") .EnableOutlining = True .Protect UserInterfaceOnly:=True End With End Sub これをブック全体に反映できるマクロを教えて下さい。 ブック内のシート数は多いもので10シートほど、シート名は和英混合です。 ブックの数は40程有り全てのシートにマクロを設定するのは途方もなく 時間が掛かりそうで困っています。 当方のエクセルはExcel2007SP3です、宜しくお願いします。

  • マクロ auto_open がうまくゆかない

    マクロで たとえば auto_open()  Sheets("sheet1").select というように編集しても ファイルをオープンした時全然このマクロ自体が有効にならず、手動で、「セキュリティの警告 マクロが無効にされました オプション」 となっている「オプション」をクリックしてはじめて sheet1 が自動表示されます。 AUTO_ OPEN はファイルを開いた時に即有効になるんではないかと思いますが、どうしてでしょうか。

  • 再びExcelの自動スクロールアップのマクロについて

    Excel2002をOpenした時自動的にスクロールアップするマクロを識者より教えて頂きました。 下記の回答です。 ThisWorkbookのWorkbook_Openイベントに下記をコピペ する。 Private Sub Workbook_Open() ActiveSheet.Cells(1, ActiveCell.Column).Select End Sub 結論は上記で目出度く目的が達せられましたが 実はBookの中の複数あるSheetの内、立ちあがった時、開いているSheetにしかこのマクロが働いて後の複数のSheetはスクロールアップはしません。 質問はBookをOpenした時Bookの中にある全部のSheetがスクロールアップすることが出来る方法はあるのでしょうか。 よろしくお願いします。

  • マクロ Auto_Openがうまく動きません

    マクロ Auto_Openについてお伺いします。 エクセル立ち上げ時IMEは半角英数になっており、手動でひらがな入力にしますが、 そこである雑誌を見ると Sub Auto_open () Send Keys ("{Kanji}") End Sub のマクロを組み込めば立ち上げ時日本語入力になるとのこと XPの時はこれで問題なかったように記憶しております。 しかしwindows7になるとうまく働きません。ステップINで確認すると、確かに日本語入力に変わりますが、エクセル立ち上げ時、自動的に変わりません。なぜなのでしょうか。 windows7の場合OSか何か変わったのでしょうか? なんとかwindows7でエクセル立ち上げ時、自動的に日本語ローマ字入力にしたいのですが、 どちら様か良い知恵をアドバイスお願いいたします。

  • Excelマクロで同じブックにCSVを読み込むには

    Excelの指定したシートにCSVファイルを読み込ませたいのですが 以下のVBAマクロを実行すると新しいブックが起動して 新しいブックの方にCSVファイルが読み込まれてしまうのですが これをVBAマクロを実行しているブックの指定のシート(例えばSheet3など)に 読み込ませたいのですがどのように記述すればよいのでしょうか。 よろしくお願いします(Excel2010) Sub Macro1()  ChDir "C:\test"  Workbooks.Open Filename:= "test1.csv" End Sub

  • アクセスでauto_openは使えない?

    エクセルの場合は、ブックを開いたと同時にマクロを実行させたい時は、 auto_openと言うマクロを標準モジュールに作れば可能ですが、 アクセスVBAの標準モジュールに、auto_openというプロシージャーを作って、 アクセスを再起動しても何も起こりません。 アクセスにおいて ファイルの起動と同時にマクロを実行させたいのなら、 どこかのフォームのOpenイベントに実行させたいコードを記載して、 起動時の設定で、そのフォームを選択するしかないのでしょうか?

  • Excel マクロ ファイルオープン時 自動実行 

    いつもありがとうございます。初心者につき、わかりにくい文章かもしれませんが、宜しくお願い致します。 Excel2003で改ページを自動で行うマクロをこちらの過去の質問を参考にしながら作成しました。 勤め先の同僚にも配布しようと思い、どうせならマクロ実行が簡単なようにと、ユーザー定義のツールバー作成のマクロも作成。ここまでは無事に出来たのでが・・・ さらにファイルを開いた時に自動でツールバーが作成マクロを実行するように Sub Auto_Open()を用いて無事に成功、しかし一旦終了して再度このファイルを開くと 実行時エラー ’5’: プロシージャの呼び出し、または引数が不正です。 というエラーが出てしまいます。一回目に開いた時にSub Auto_Open()によって作成したツールバー作成のマクロを再度実行しようとするのが原因だと思うのですが、これを回避する方法があるのでしょうか? ちなみにエラーのダイヤログの終了ボタンを押せば、他のマクロは問題なく作動しますし、 本来の目的は別ファイルの改ページを、自動に行うためのマクロの実行をツールバーにて簡単に行うためのもので、このエラーが出たからといって何ら支障は無く、他のファイルからこの改ページのマクロを実行してもエラーは出ず、本来の目的は達成しおり問題は無いのですが、気分的にスッキリしません。何卒宜しくお願い致します。 下記をご参照ください。(実際は改頁マクロは複数あり) Sub A改ページ() Dim PB As HPageBreak Dim idx As Long Const tCol As String = "A" '改頁判断する列 With ActiveSheet For idx = 3 To .Cells(65536, tCol).End(xlUp).Row If .Cells(idx, tCol) <> .Cells(idx - 1, tCol) Then ActiveSheet.HPageBreaks.Add Before:=.Cells(idx, tCol) End If Next idx End With End Sub Sub ツールバー作成() Dim myBar As CommandBar, myButton As CommandBarButton Set myBar = CommandBars.Add myBar.Name = "改頁マクロ" Set myButton = myBar.Controls.Add myButton.OnAction = "A改ページ" myButton.FaceId = 80 myBar.Visible = True End Sub Sub Auto_Open() ツールバー作成 End Sub

  • 複数のブックを開いているとエラーが出てしまいます

    エクセルのマクロ初心者でたいへん恐縮です。質問の仕方が悪ければお詫び申し上げます。  エクセルでそれぞれ違うマクロが記録された二つのブックを開いて、シートの表から抽出などの操作をしています。例えば、(1).xlsと (2).xlsにはそれぞれ部品表のようなリストを含めて3つのシートがあります。その二つのブックを頻繁にアクティブに切り替えながら作業をしようとしているのですが、片方を使っていると別のブックを使った時に「インデックスが有効範囲にありません」というエラーが出て、アクティブブックとは違うシートを読み込んでしまっているようです。 ちなみにブックを一つだけ開いて操作している時は全くエラーはでません。二つのブックを扱っている時だけです。マクロはエンターを押すと実行されるようになっており、一方を実行するともう片方のブックでエラーが出てしまいます。 その二つのブックのコードでエラー(黄色く表示)になるのは以下の★~★の部分です。 ------------------------------------------------------------------------------------ <(1).xlsのマクロ> Sub Auto_Open() ' Auto_Open Macro ActiveSheet.Unprotect ' ★Sheets("パッキンリスト").Columns("B:N").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("B2:B3"), CopyToRange:=Range("検索出力表!Extract"), Unique _ :=False★ ActiveWindow.SmallScroll Down:=-28 Range("C19:N19").Select Selection.Copy Range("D3:E14").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=True ActiveWindow.SmallScroll Down:=4 Rows("21:21").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp ActiveWindow.ScrollRow = 1 Range("B3").Select Application.OnKey Key:="{RETURN}", Procedure:="Auto_Open" Application.OnKey Key:="{ENTER}", Procedure:="Auto_Open" ActiveSheet.Protect UserInterfaceOnly:=True End Sub ----------------------------------------------------------------------------------- <(2).xlsのマクロ> Sub Auto_Open() ' Auto_Open Macro ActiveSheet.Unprotect If Range("B3").Cells = "" Then MsgBox "  ☆ パーツNo,が未入力です。" ActiveSheet.Protect UserInterfaceOnly:=True Exit Sub End If ★Sheets("パーツリスト").Columns("C:G").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("B2:B3"), CopyToRange:=Range("B20:E20"), Unique:= _ True★ Range("C21:E21").Copy Range("D3:E5").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=True ActiveWindow.ScrollRow = 1 Application.OnKey Key:="{RETURN}", Procedure:="Auto_Open" Application.OnKey Key:="{ENTER}", Procedure:="Auto_Open" ActiveSheet.Protect UserInterfaceOnly:=True End Sub ------------------------------------------------------------------------------------  二つのブックを開いて、下のタスクバーでブックを切り替えて操作してもお互いが干渉せずそれぞれのブックのプログラムがエラー無く動くようにしたいのですが、 もし、何か解決法などございましたらご教授いただければ幸いです。 何卒よろしくお願い申し上げます。

  • Excel起動時にAuto_Openでマクロを動作させています。

    Excel起動時にAuto_Openでマクロを動作させています。 1回目はマクロを行いたいのですが、 次回起動時はマクロを使用したくありません。 (初期にAuto_Openを使用しなければいいのですが、できれば使用したいです) そこで下記はできますでしょうか? ・名前を付けて保存(時)後にマクロを削除するマクロ ・2回目以降起動時(該当のファイル名が違う場合に、Auto_Openが動作しない)マクロ ほかでもよい案があれば教えてください。

専門家に質問してみよう