• ベストアンサー

エクセルVBAで数式バー再表示後保存して終了

あるワークブックで、ひとつひとつのセルの内容が長いため、そのワークブックを開くと数式バーが非表示になり、閉じるときは再表示にしてから閉じたいのです。 今はとりあえず、コマンドボタンを二つ作って、ひとつは数式バーの非表示、もうひとつは数式バー再非表示後終了用としたいと思っています。 非表示は、マクロの記録で、簡単にできるのですが、再表示後終了ができません。 Application.DisplayFormulaBar = True ActiveWorkbooks.Close 上の用にVBAに記述すると、「実行時エラー 424 オブジェクトが必要です」と表示されてしまいます。 どのように変えればいいのでしょうか? また、一番の希望は上に書いたように、そのワークブックを開くと数式バーが非表示になり、閉じるときは再表示にしてから閉じたいのですが、VBAでそのようなことは可能でしょうか? もし可能なら、教えていただけるとうれしいです。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。KenKen_SP です。 数式バー表示・非表示の設定は再設定されるまで継承されます。 例えば、Workbook_Open とか Auto_Open で数式バーを非表示にして しまうと、同時に複数のブックを開くと分かりますが、全てのブック で数式バーが消えてしまいます。 したがって、Activate と Deactivate イベントに書いた方が良いと 思います。 また、ブック全体で、あるいは特定シートだけで、、といった制御の 必要な部分によってマクロを書く場所が異なります。 例えば、特定ブックだけで数式バーの表示を操作するなら '【Thisworkbook モジュール】 Private Sub Workbook_WindowActivate(ByVal Wn As Window)   Application.DisplayFormulaBar = False End Sub Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)   Application.DisplayFormulaBar = True End Sub 例えば、特定のシートだけで数式バーの表示を操作するなら '【シートモジュール】 Private Sub Worksheet_Activate()   Application.DisplayFormulaBar = False End Sub Private Sub Worksheet_Deactivate()   Application.DisplayFormulaBar = True End Sub

maimai01
質問者

お礼

こんな方法もあるのですね。 確かに、他の方法では、他のブックにも影響が出ますね。だから、おっしゃるように、アクティブブックだけで、数式バーが表示になれば、いうことはないです。 で、やってみました。いいです、これ! ほんと助かりました。これでとっても便利に使うことができます。ありがとうございました。

その他の回答 (2)

回答No.2

登録する「イベント」を適切に選択すれば、ご希望の動作になります。 > 非表示は、マクロの記録で、簡単にできるのですが ツール → マクロ → VisualBasicEditor を開くと、上記のマクロは 「WorkBook_Open」に記述されていると思います。 (エディタの右上にあるコンボボックスの表示を確認) その状態から、コンボボックスの中の「Workbook_BeforeClose」を 選択すると Private Sub Workbook_BeforeClose(Cancel As Boolean) End Sub こんな表示が出ますので、このPrivate~End Subの行の間に Application.DisplayFormulaBar = True と記述してあげればOKです。

maimai01
質問者

お礼

非表示をマクロの記録を使ってVBに記述させた場合、 「WorkBook_Open」に記述されているのではなく、標準モジュールの中に記述されていました。 で、 sub WorkBook_Open end sub this workbook の中に記述すると、おっしゃるようにエディタの右上にあるコンボボックスの中にいろいろなイベントが選べるようになりました。 そして、そのいろいろなイベントのところに、実行したいコマンドを記述すればいいのですね。 なるほどーー。忘れていたことが、大分蘇ってきました。ありがとうございました。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>ActiveWorkbooks.Close ActiveWorkbook.Close ですね。 マクロで終了させなくても、普通の終了方法で設定を変更させる事が出来ます。 標準モジュールの Auto_Open() Auto_Close() 若しくは、ThisWokbook イベントの Workbook_Open() Workbook_BeforeClose(Cancel As Boolean) に、表示・非表示のマクロを記述すると自動的に実行してくれます。

maimai01
質問者

お礼

早速教えていただいて、ありがとうございます。 できましたーー。(^-^) それから、ActiveWorkbooks.Close ではなくて、ActiveWorkbook.Close なのですね。ひとつしかブックを開けていないのに、複数にしたのがいけなかったのですね。なるほどーー。 あと、標準モジュールに Sub Auto_Open() Application.DisplayFormulaBar = False End Sub と、 Sub Auto_Close() Application.DisplayFormulaBar = True End Sub を付け加えたら、うまくいきました。 あと、ThisWokbook イベントの中に記述しても、いけるのですね。 大分前に少しだけ、かじったことがあって、確かそういうのもあった気はしていたのですが、これで、はっきりしました。とっても助かりました。ありがとうございました。

関連するQ&A