Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10全般 : Excel 2019)
Openイベントが実行されない
投稿日時: 23/01/13 03:11:58
投稿者: Yamato2003

    ブックのOpenイベントが実行されません。
解決方法を探しています。
 
1;使用環境:Excel2019、Windows10
 
2;試したこと・わかっていること
 
2.1 Module内でapplication.EnableEvents = Trueを記述し実行した。
2.2 ブックを開きイミディエイトウィンドウで?Application.EnableEventsと入力すると”True”が返ってくる
 
まとめると
・EnableEventsは有効であるのに、xlsm形式ブックのOpenイベントは実行されない
 
3;その他
・PERSONAL.xlsb上でOpenイベントを行っています。PERSONALのOpenイベントは実行されます。(その後開かれるxlsmブックに記述されたOpenイベントは無視されます)
・4か月前ほど前、これまで作ってきたマクロ対応ブックですべてOpenイベントが無視されるようになりました。 一部のブックはXlsmブックにModuleを挿入し、そこにApplication.EnableEventsの記述をし、実行することでOpenイベントが実行されました。
 
・新たにブックを作った場合でもOpenイベントが実行されないことがあります。
(=ブックの破損ではない可能性があります)
 
・例えば次のような内容が短いものはOpenイベントが実行されたことがあります
Sub workbook_open()
msgbox("a")
end sub
一方以下のような内容が長いものはOpenイベントが実行されません。
Sub workbook_open()
msgbox("a")
with application
 .onkey "a", "Thisworkbook.a"
 .onkey "b", "Thisworkbook.b"
 .onkey "c", "Thisworkbook.c"
 .onkey "d", "Thisworkbook.d"
end with

回答
投稿日時: 23/01/13 08:31:39
投稿者: simple

念のための確認ですが、
Private Sub Workbook_Open()
   '処理
End Sub
は、ThisWorkbookモジュールに書かれていますよね?

回答
投稿日時: 23/01/13 09:01:52
投稿者: Suzu

引用:
Openイベントが実行されません

 
何をもって実行されていないと判断されたのでしょうか?
・msgbox("a") で、実行されるであろう
  "a" のメッセージの メッセージボックス が表示されない
 
・WorkBook_Open プロシージャ の どこかに
 ブレイクポイントを設け、Open時に そのブレイクポイントで コード実行が停止しない
 
・Onkey で 登録してある a や b を押したときに
 その呼び出し先であるはずのプロシージャが実行されない
 
 :
 etc
 
 
Application.OnKey "a", "Thisworkbook.a"
これを、WorkBook_Openプロシージャでなく、
普通の Subプロシージャにて実行し、その上で、Excel上で a を押してみてください。
 
マクロ "ファイルパス'!Thisworkbook.a' を実行できません。このブックでマクロ使用できないか、またはすべてのマクロが無効になっている可能性があります。
 
と、なります。
 
Application.OnKey "a", "a"
 
の様に ThisWorkBook を記載してはダメです。

回答
投稿日時: 23/01/13 09:19:45
投稿者: Suzu

マクロにショートカットキーを設定する
https://www.moug.net/tech/exvba/0150112.html
 
にもありますが、
OnKey は、全てのブックで有効になります。
 
ブック1 にて
---------------------------------
Private Sub Workbook_Open()
  With Application
    .OnKey "{a}", "a"
 End With
End Sub
 
Sub a()
 ・・・
End Sub
---------------------------------
 
として、
 
1)ブック1 で キー aで、Sub a が実行される様にし
 別のブック ブック2 を開いたあと、ブック1 を閉じ、ブック2 上 で a を押すと
 ブック1 が 開かれ、Sub a が実行されます。
 
2)ブック1 で キー aで、Sub a が実行される様にし
 ブック1 を閉じExcel自体も閉じます。
 ブック2 を開き a を押しても 実行されません。
 
動作の確認方法も 念頭においておきましょう。

回答
投稿日時: 23/01/13 15:40:06
投稿者: CristianPoole

上の問題の解決策を探してください https://www.youtube.com/

投稿日時: 23/01/13 18:05:21
投稿者: Yamato2003

simple さんの引用:
念のための確認ですが、
Private Sub Workbook_Open()
   '処理
End Sub
は、ThisWorkbookモジュールに書かれていますよね?

 
はい、Thisworkbookに書いています。

投稿日時: 23/01/13 18:07:20
投稿者: Yamato2003

Suzu さんの引用:
引用:
Openイベントが実行されません

 
何をもって実行されていないと判断されたのでしょうか?
・msgbox("a") で、実行されるであろう
  "a" のメッセージの メッセージボックス が表示されない
 
・WorkBook_Open プロシージャ の どこかに
 ブレイクポイントを設け、Open時に そのブレイクポイントで コード実行が停止しない
 
・Onkey で 登録してある a や b を押したときに
 その呼び出し先であるはずのプロシージャが実行されない
 
 :
 etc
 
 
Application.OnKey "a", "Thisworkbook.a"
これを、WorkBook_Openプロシージャでなく、
普通の Subプロシージャにて実行し、その上で、Excel上で a を押してみてください。
 
マクロ "ファイルパス'!Thisworkbook.a' を実行できません。このブックでマクロ使用できないか、またはすべてのマクロが無効になっている可能性があります。
 
と、なります。
 
Application.OnKey "a", "a"
 
の様に ThisWorkBook を記載してはダメです。

 
 
 
「何をもって実行されていないと判断されたのでしょうか?」→メッセージボックスが表示されないことで判断しました。
 
 
「Application.OnKey "a", "Thisworkbook.a"
これを、WorkBook_Openプロシージャでなく、
普通の Subプロシージャにて実行し、その上で、Excel上で a を押してみてください。」
→登録したマクロは実行可能でした。
 
 

投稿日時: 23/01/13 18:08:54
投稿者: Yamato2003

Suzu さんの引用:
マクロにショートカットキーを設定する
https://www.moug.net/tech/exvba/0150112.html
 
にもありますが、
OnKey は、全てのブックで有効になります。
 
ブック1 にて
---------------------------------
Private Sub Workbook_Open()
  With Application
    .OnKey "{a}", "a"
 End With
End Sub
 
Sub a()
 ・・・
End Sub
---------------------------------
 
として、
 
1)ブック1 で キー aで、Sub a が実行される様にし
 別のブック ブック2 を開いたあと、ブック1 を閉じ、ブック2 上 で a を押すと
 ブック1 が 開かれ、Sub a が実行されます。
 
2)ブック1 で キー aで、Sub a が実行される様にし
 ブック1 を閉じExcel自体も閉じます。
 ブック2 を開き a を押しても 実行されません。
 
動作の確認方法も 念頭においておきましょう。

 
 
 
了解です。

回答
投稿日時: 23/01/16 09:07:52
投稿者: Suzu

引用:
「何をもって実行されていないと判断されたのでしょうか?」→メッセージボックスが表示されないことで判断しました。

 
引用:
「Application.OnKey "a", "Thisworkbook.a"
これを、WorkBook_Openプロシージャでなく、
普通の Subプロシージャにて実行し、その上で、Excel上で a を押してみてください。」
→登録したマクロは実行可能でした。

 
これは、同じワークブックで実行されたのでしょうか?
セキュリティー等の兼ね合いで、実行されなかったのかと推測したのですが・・・
 
Openイベントが実行されなかった ブックにて 新たな標準モジュールを作成。
その中で適当なプロシージャを作成。
F5 等で、プロシージャを実行し、プロシージャの実行を行ってください。
それでも、実行できるのでしょうか?
 
 
後者の
引用:
「Application.OnKey "a", "Thisworkbook.a"
これを、WorkBook_Openプロシージャでなく、
普通の Subプロシージャにて実行し、その上で、Excel上で a を押してみてください。」
→登録したマクロは実行可能でした。

 
当方環境、 Win10Pro 64bit、Excel2019 32bitですが、
『マクロ "ファイルパス'!Thisworkbook.a' を実行できません。このブックでマクロ使用できないか、またはすべてのマクロが無効になっている可能性があります。』とメッセージが表示され、実行できないです。
 
Application.OnKey "a", "Thisworkbook.a"
この、Thisworkbook.○○ の コーディングでは、
キー『a』を押した時に、Sub a を 呼び出せない認識なのですが・・

回答
投稿日時: 23/01/19 14:08:13
投稿者: simple

もう一度事実関係を調査されたらいかがでしょう。
Openイベントで MsgBoxすら無効ということは、
Application.EnableEventsがFalseになっているとしか思えません。
 

引用:
・PERSONAL.xlsb上でOpenイベントを行っています。
  PERSONALのOpenイベントは実行されます。
(その後開かれるxlsmブックに記述されたOpenイベントは無視されます)
とのこと。
PERSONAL.xlsb内のどこかで
  Application.EnableEvents = False
などとしていませんか?
Changeイベントプロシージャのなかで、FalseにしたままTrueに戻していないとか。
 
ScreenUpdatingなどは、プロシージャを抜けると自動的にTrueに戻りますが、
EnableEvents = False は自動で元にもどるといったことはありませんから、
注意が必要です。
 
Openイベントプロシージャが動作しない時点で、
Application.EnableEventsが何になっていたかは確認されたのでしょうか
 
---------------------
なお、以下の点は私も再現実験しましたが、正常に動作しました。
(環境は同じく、Windows 10 : Excel 2019です)
引用:
一方以下のような内容が長いものはOpenイベントが実行されません。
Sub workbook_open()
msgbox("a")
with application
 .onkey "a", "Thisworkbook.a"
 .onkey "b", "Thisworkbook.b"
 .onkey "c", "Thisworkbook.c"
 .onkey "d", "Thisworkbook.d"
end with
End Sub

トピックに返信