ExcelVBAで質問です。Workbook_openイベントが発生しない。
Excel2003を開いている状態で「ファイル」→「開く」でファイルを開くと
Workbook_openイベントが発生しません。他のマクロは正常に動くのですが、
Excelを閉じている状態でファイルを開くとWorkbook_openイベントが発生します。
(Workbook_Activateイベントでも同様の結果になりました。)
なぜでしょうか?基本的なことかもしれないですが教えていただけると幸いです。
宜しくお願いします。
No.2ベストアンサー
- 回答日時:
『常に』Workbook_openイベントが発生しないのですか?
試しに
Sub test()
MsgBox Application.EnableEvents
End Sub
こんなマクロを実行してみてください。
イミディエイトウィンドウに
?Application.EnableEvents
と入力してEnter、でも良いです。
これでApplicationのイベント制御状態が判ります。
Falseの場合、イベントを発生させない設定になっています。
他Bookのコードで
Application.EnableEvents = False
と記述している箇所はないですか?
この回答への補足
ありがとうございます。
Workbook_openイベント(ThisWorkbook自体)は常に発生しないのではなくExcelを起動している
状態でファイルを開いた時だけ発生しない様です。ファイルからExcelを起動した場合は発生します。
頂いたコードを早速試してみたのですが「True」と帰ってきます。
他Bookのコードも確認しましたがありませんでした。
No.8
- 回答日時:
整理すると、
・ThisWorkbookにイベントコードが書かれたBook、【test.xls】がある。
・起動済みExcelから[ファイル]-[開く]で【test.xls】を開いても、
Workbook_OpenやWorkbook_Activateイベントが機能しない。
という問題。
確認済み事項としては
1)Excelが起動してない状態で【test.xls】を開くと
Workbook_OpenやWorkbook_Activateイベントが実行される。
2)EnableEventsプロパティでのイベント制御ではない。
3)この問題が発生してるのは【test.xls】のみで、
新規BookのWorkbook_Openイベントは問題なく実行される。
4)アプリケーションの自動修復を行っても解消されない。
...といったところですね。
安直な回答になるかもしれませんが、Bookの破損を疑ったほうが良いと思われます。
Bookを作成し直す事は可能でしょうか?
新規Bookに旧Bookのデータのみを移します。シートやモジュールのコピーではなく。
1)新規Book作成し、必要なシート数を追加する。
2)各シートごとに、旧シートのデータ範囲をコピーし、
新規Bookシートに貼り付ける。
3)他シートを参照している数式などがあれば[編集]-[リンクの設定]で
リンク元を修正する。
また、名前の定義を設定していたりする場合は再設定する。
4)各シートにVBAコードが書かれているなら、
そのコードを新規Bookのシートモジュールにコピーペーストする。
5)標準モジュールがあれば必要数を挿入し、コードのみコピーペーストする。
6)ThisWorkbookモジュールのコードのみをコピーペーストする。
できれば、念のためThisWorkbookモジュールのコードウィンドウの上部、
(General)(Declarations)のドロップダウンリストからプロシージャを選択し、
コードの中身だけ移す。
以上のような手順になります。状況が許せばBookの作り直しをおすすめします。
いつも丁寧な回答ありがとうございます。
Application.EnableEvents = False のコードがあり、Trueに戻したらマクロが働きました。
end-uさんの最初の回答の時に、頂いていたのにきちんと確認をしなかった私が悪かったです。
大変申し訳ありませんでした。
今後は、みなさんにご迷惑を掛けるので、もっと勉強してから質問致します。
本当にご迷惑をお掛けしました。又、お知恵を拝借できれば幸いです。今後とも宜しくお願い致します。
No.7
- 回答日時:
#5の回答者です。
他人に代弁してもらって、その人の発言が合っているなんて言い方では返事になっていないと思います。解決しているなら、私は何も言いません。私は、誰が解決しようと構わないです。しかし、そうでないなら、もうちょっと、手がかりになる内容を分かりやすく、丁寧に書いてほしいですね。解決したいなら、手を抜かないでください。
>使用している「book」は1種類のみです。
一種類?種類と言われたら分からないですね。通常は、何個使っても、CSVやxlsmが混在していなければ、種類は一種類のはずです。
ファイルはひとつってことで、その中で、スコープとしては、ThisWorkbook モジュール内で動いたり働かなかったりということですか?もし、そうなら、コードを見なければ話にならないと思います。
それとも、Excelを起動して、空の状態(Book1など)で、次に既存のファイルを開いて、Workbook_Openイベントが動かないというのか、それとも、別の既存のブック(マクロ搭載)を開いて、もうひとつの既存のファイル(マクロ搭載)で、そのWorkbook_Openのイベントが働かないということですか。
現象例:
エクプローラから、Excelファイル(xls)を選択して起動しファイルを開くなら、Workbook_Openイベントは働くというのは分かっています。しかし、その次です。
(1)
Excel起動 空のブックが出てくる(Book1) そこで、ファイル--[開く]--> myBook1.xls(マクロ搭載-Workbook_Open)
ここで、Workbook_Openのイベントが働かない
もしくは、
(2)
Excel起動 空のブックが出てくる(Book1) そこで、ファイル--[開く]--> myBook1.xls(マクロ搭載)--myBook1.xlsを操作をする --[開く]-->myBook2.xls(Workbook_Openイベント搭載)
ここで、Workbook_Openのイベントが働かない
一体、どういうことなのでしょうか?
>Workbook_openイベントが発生しません。他のマクロは正常に動くのですが、
ふつうは、コードを見てもらうのが一番早いです。それで、そのコードに問題ないか判定できます。
しかし、人にコードを見せるのが嫌だったら、Workbook_Open()、その次の行あたりに、Stop ステートメントを入れておいて、一旦保存して、ファイルを開く操作をすればよいです。Stopで、VBEditor が開き、ステップモードに替えれば、イベントが走っていることが分かるはずです。そうでなければ、イベントは働いていないということですから、その前のファイルの段階で問題が発生しているということになります。
VBAは、単にイベントが働いていないという現象だけで、問題の箇所をピタリ当てられるほど、単純だとは思っていません。
解決方法の具体例
例1:
Private Sub Workbook_Open()
Stop '←ここに入れる(イベントが働いていれば、ここで止まります)
変数の宣言
・
・
・
もうひとつは、他のイベントやコードで、
Application.EnableEvents = False
'実行
Application.EnableEvents = True '←この戻すのを忘れているとか、False のままで終わっているということですね。
検索で、「Application.EnableEvents」をプロジェクト内で調べればよいです。
False 側が抜けていれば、それを直せばよいです。
でも、この話だけでは、まだ抜けがあります。つまり、それは、(一種類でなく!)ファイルがひとつだとしたら、そんなことはありえないです。当たり前のことですが、開けた時だけですから、Workbook_Open()イベントは、二重には働かないからです。そんな自明のことを言っているは思えないのです。
大変失礼な返事をしてしまい、申し訳ありませんでした。以後、気をつけます。
Application.EnableEvents = False のコードがあり、Trueに戻したらマクロが働きました。
今後は、みなさんにご迷惑を掛けるので、もっと勉強してから質問致します。
本当にご迷惑をお掛けしました。又、お知恵を拝借できれば幸いです。今後とも宜しくお願い致します。
No.6
- 回答日時:
ありゃ。
済みません、>1)起動済みExcelからファイルを開く時はどのように開いてますか?
> [ファイル]-[開く]からでしょうか。
この確認は不要でした。無かった事にしてください。
>Excel2003を開いている状態で「ファイル」→「開く」でファイルを開くと
>Workbook_openイベントが発生しません。
と、最初の質問文に明記してありましたね。失礼しました。
それと、Workbook_Openイベントは、それが書かれているBook自身がOpenする時に走るイベントです。
他BookのOpenは感知しません。
Workbook_Openイベントが書かれたBookが【test.xls】というBookだとします。
・Excelが起動してない状態で、その【test.xls】を(例えば)ダブルクリックで開くとOpenイベントが走る。
・先にExcelを起動して、[ファイル]-[開く]から【test.xls】を開くとOpenイベントが走らない。
と、いうふうに質問文を解釈していました。
ですが、Wendy02さんがおっしゃるように
・【test.xls】自体を開くとOpenイベントが走る。
・先に【test.xls】を開いておいて、【他のBook】を開いた時にはOpenイベントが走らない。
という現象についての質問でしたら私のカン違いですから回答番号:No.4は不要です。
捨て置いてください。
毎回ご丁寧にありがとうございます。
end-uさんの解釈の通りです。説明が下手で申し訳ありません。
後、確認したところWorkbook_Openイベントではなく、ThisWorkbookのマクロが走らない様です。
No.5
- 回答日時:
>Workbook_openイベント(ThisWorkbook自体)は常に発生しないのではなくExcelを起動している
>状態でファイルを開いた時だけ発生しない様です。ファイルからExcelを起動した場合は発生しま>す。
それは、イベントの種類が違っているからだと思います。以下のようにすればできるはずです。別に、Workbook_Openは関係がないのですが、最初に、xlAppオブジェクトを作らないといけないからから、使っています。xlApp_WorkbookOpenイベントという違うイベントです。
最初に、Workbook_Open()を実行しないと、次のブックには感知しません。なお、新規ブック(NewBook)に関しては、イベントが違います。
'//ThisWorkbook モジュール
Private WithEvents xlApp As Application 'モジュールの上部に書く
Private Sub Workbook_Open()
Set xlApp = Application
End Sub
Private Sub xlApp_WorkbookOpen(ByVal Wb As Workbook)
MsgBox Wb.Name
End Sub
No.4
- 回答日時:
イベント制御の影響ではないみたいですね。
確認したい事が何点かあります。
1)起動済みExcelからファイルを開く時はどのように開いてますか?
[ファイル]-[開く]からでしょうか。
2)VBAのコードから該当Bookを開いた場合はどうなりますか?
Workbooks.Open Filename:="C:\test\Book1.xls"
..など。 "C:\test\Book1.xls"は該当Bookのフルパス。
3)新規Bookで以下のコードだけの場合でも発生しませんか?
Private Sub Workbook_Open()
MsgBox ThisWorkbook.Name
End Sub
4)Openイベントが発生しない事はどのように確認しましたか?
該当BookのWorkbook_Openイベントの冒頭に
MsgBox ThisWorkbook.Name
あるいは
Stop
と入れて保存後閉じて、再度開いてみてください。
丁寧な回答ありがとうございます。
早速試して、以下の結果になりました。
>1)起動済みExcelからファイルを開く時はどのように開いてますか?
[ファイル]-[開く]です。又、[ファイル]ダブルクリックでも同様の結果になります。
>2)VBAのコードから該当Bookを開いた場合はどうなりますか?
すいません。VBA始めたばかりの初心者なので開く方法がわからないです。
>3)新規Bookで以下のコードだけの場合でも発生しませんか?
コードを実行して起動済みExcelからMsgBoxが発生しました。
>4)Openイベントが発生しない事はどのように確認しましたか?
コードを実行して起動済みExcelからMsgBoxが発生しませんでした。
No.3
- 回答日時:
> ThisWorkbook自体のマクロが動かない様です。
新しいファイルで試しても動かないのでしたら、一度メニューのヘルプにあるアプリケーションの自動修復を行ったらいかがでしょう。
また、
C:\Program Files\Microsoft Office\OFFICE11\XLSTART
の中になにかしらのエクセルファイルがあれば、どこかに移動してみてから試してみてください。
毎回の回答ありがとうございます。
アプリケーションの自動修復を行ったのですが良い結果は得られませんでした。
又、お知恵をいただければ幸いです。宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) excelvbaのenableeventsについて 3 2022/08/30 11:20
- PostgreSQL ポストグレにあるExcelファイルを開くには 1 2022/12/13 18:07
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Excel(エクセル) エクセル 値をコピペした時に、条件付き書式で塗られた背景色もペーストさせる 2 2023/04/05 17:21
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- その他(IT・Webサービス) vba初心者です。 質問です。 毎回ファイル名が変わるファイルを開きたいです。 open filen 1 2022/06/11 17:59
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
2024年のうちにやっておきたいこと、ここで宣言しませんか?
2024年も残すところ50日を切りましたね。 ことしはどんな1年でしたか? 2024年のうちにやっておきたいこと、 よかったらここで宣言していってください!
-
とっておきの「まかない飯」を教えて下さい!
飲食店で働く方だけが食べられる、とっておきの「まかない飯」。 働いてらっしゃる方がSNSなどにアップしているのを見ると、表のメニューには出てこない秘密感もあって、「食べたい!!」と毎回思ってしまいます。
-
Workbook_openでマクロが実行されない
Excel(エクセル)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
VBAでファイルオープン後にコードが実行されない
Visual Basic(VBA)
-
-
4
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
5
Openイベントを開始させないでエクセルを開く方法を教えて下さい
Windows 10
-
6
Sub Auto_Open() 実行されない
Excel(エクセル)
-
7
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
8
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
9
XL:BeforeDoubleClickが動かない
その他(プログラミング・Web制作)
-
10
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
11
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
12
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
13
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
14
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
15
UserForm1.Showでエラーになります。
工学
-
16
Application.Runエラー(1004)
Excel(エクセル)
-
17
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
18
エクセルのvbaにて thisworkbookに記載のマクロを他のブックにマクロにて自動コピー出来る
Excel(エクセル)
-
19
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
20
エクセルVBAのフォームを最前面にする方法を教えてください。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
月の最後の週の呼び名は?
-
8月までっていつまでのことでし...
-
10月をもって辞めるって、10...
-
カレンダーの日付 5/Bの意味に...
-
エクセルのフィルターを複数シ...
-
「陽気」という言葉の使い方
-
彼氏がクリスマスバイトをいれ...
-
「1年以上」の定義について
-
VBAで先月、先々月を求める方法
-
入社が2月1日とした場合、3ヶ月...
-
誕生日とクリスマスの近い彼氏...
-
クリスマスとクリスマスイブセ...
-
「6月まで」というのは6月以内...
-
10周年というのは丸10年間終え...
-
定年になる年度を関数で算出したい
-
昔の愛称?「~の字」
-
「なんで付き合おうと思ったか...
-
ExcelVBAで質問です。Workbook_...
-
本願寺教如書状
-
仲の良い男友達から「クリスマ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
8月までっていつまでのことでし...
-
10月をもって辞めるって、10...
-
カレンダーの日付 5/Bの意味に...
-
月の最後の週の呼び名は?
-
昔の愛称?「~の字」
-
入社が2月1日とした場合、3ヶ月...
-
エクセルのフィルターを複数シ...
-
「1年以上」の定義について
-
「なんで付き合おうと思ったか...
-
「6月まで」というのは6月以内...
-
○年後の3月末日を関数で出したい
-
昔は何歳くらいからお酒を飲ん...
-
定年になる年度を関数で算出したい
-
一ヶ月前、一ヶ月後
-
VBAで先月、先々月を求める方法
-
月度ってどういう意味ですか
-
VBA ユーザーフォームのChange...
-
確認ですが普通5月までに決める...
-
○月第○週 の数え方について
-
11月について 10月はハロウィン...
おすすめ情報