[[20250619102306]] 『MSGBOXのボタンクリック』(敬) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『MSGBOXのボタンクリック』(敬)

エクセルブックAのマクロから
エクセルブックBを開いて
エクセルブックBのシートにあるボタンをクリックし
エクセルブックBのマクロを走らせる。

エクセルブックBのマクロを走らせる途中
メッセージ(MSGBOX)が何回か表示されるので
OKボタンを押して処理を続行させる。
エクセルブックBのマクロが終了後
エクセルブックAのマクロで
エクセルBのメッセージ(MSGBOX)に表示されていた内容を
エクセルブックAで集計しまとめて表示を行いたい。

どうすればよいのでしょうか?

メッセージの集計ができないのであれば
MSGBOXのOKボタンをクリックして
次に進めるだけでもいいのですが
よろしくお願いします。

< 使用 Excel:Excel2016、使用 OS:Windows11 >


【エクセルブックAのマクロ】
エクセルブックBファイルを開いたら、
ボタンをクリックしたときのプロシージャを呼び出すように変更

【エクセルブックBのマクロ】
メッセージ(MSGBOX)が何回か表示されないように変更し、
メッセージの内容を配列変数に入れるなどして確保しておき、
確保した物をエクセルブックAの
指定のシート、指定のセルに代入させるように変更

これではだめですか?

(匿名) 2025/06/19(木) 10:53:19


できることならばそうしたいのですが
エクセルブックBは既存のものなので

エクセルブックAのマクロで
エクセルブックBのメッセージ(MSGBOX)が表示されないように
できるのであれば、その方法を教えてください。

(敬) 2025/06/19(木) 12:32:10


>どうすればよいのでしょうか?
コードを提示されたらどうですか。
それとも作成依頼と言うことですか。
(?) 2025/06/19(木) 14:08:11

 >エクセルブックBは既存
 マクロの編集ができないということですか?

 そういうことなら、後々を考えれば、同じ機能を持つマクロを自作してしまう OR 外注して作ってもらう

 Power Automate DeskTop とか使ったことないのですが、
 マクロのMsgBoxのボタンももしかしたらクリック出来るかもしれません(わからないけど)
(´・ω・`) 2025/06/19(木) 14:58:37

できることならばそうしたいのですが そうすればいいのでは。笑

別プロシージャで呼び出されたMsgBoxの内容を直接的に取得する
なんてことはできないと思いますけど
(FFFFFF) 2025/06/19(木) 15:04:55


 MSGBOXの内容を読み取ることは無理でしょう。(指摘があった通りです)

 (1)
 OKボタンを押すだけでもできないか、という気持ちも理解できないではありません。
 既存のマクロということですが、中身を修正したコピーが作成できるなら、
 簡単な修正でMsgBoxの表示非表示を切り替えることは可能です。
 IF(MsgBox表示フラグ) MsgBox "なんたらかんたら" 
 などと修正しておけば、冒頭でMsgBox表示フラグ変数を TRUE,FALSEで切り替えるだけです。

 それも不可ということなら、理論上は、以下で対応ができます。
     ・別のExcelインスタンスを開始して、そこからAPIを使って以下の処理を行う。
         ・FindWindowでMsgBoxのハンドルを取得
         ・FindWindowExでOKボタンのハンドルを取得
         ・SendMessageで&HF5を送る
     ・複数個のMsgBoxに対応するためには、OnTimeで一定期間ごとに上記マクロを繰り返す。
     ・最後にタイマーのリセットを確実に行う必要があります。
 しかし、煩雑でもあり我々一般ユーザーが使いこなすには難しい気がします。お薦めしません。
 手でOKボタンを押すのが負荷のかからない確実な方法でしょう。

 (2)MSGBOXの内容を読み取る点について。

 そもそも、集計に使うような情報をMSGBOXに出すだけとは驚きの仕様ですが、
 どうしてもということなら、フリーのスクリーンショット用ツールを使って、
 MSGBOXだけの画像(ALT+PrtScrで限定部分を取得できます)を
 固定のフォルダに保存して、集計することを推奨します。
 証跡を残しておけば事後的な正当性確認にも有用です。
(xyz) 2025/06/20(金) 09:25:55

 思いつきですが

 MsgBoxは普通 VBA.MsgBox が呼ばれる訳ですが、

 エクセルブックBのモジュールに MsgBox というプロシジャを作成すると、
 こちらが優先して呼ばれるので、MsgBoxをジャックできるのではないかと

 なにか背徳感がありますが
(´・ω・`) 2025/06/20(金) 10:04:36

 エクセルブックBのVBAProjectがロックされている場合は、どうしようもありませんね
(´・ω・`) 2025/06/20(金) 11:18:16

 PowerAutomate Desktopでやってみました。
 できそうです
 質問者さんが興味があるようならもうちょっと詳しく書いてもいいですが
 Excelと離れた話になるので、いまはやめておきます。
(´・ω・`) 2025/06/20(金) 15:53:13

MsgBox が表示されたらその状態で Ctrl+C を押す。
メモ帳に貼り付ける。
メッセージだけを取り除く。

(?) 2025/06/20(金) 16:39:52


 ああ、なるほど知らなかった。
 Ctrl+Cでテキストベースで情報が取れるんですね。スクリーンショットは不要でしたね。

(xyz) 2025/06/20(金) 17:09:09


 例題です。

 Sub MsgCopy()
     MsgBox "処理が完了しました"
 End Sub

 メモ帳に貼り付けるとこんな感じです。

 ---------------------------
 Microsoft Excel
 ---------------------------
 処理が完了しました
 ---------------------------
 OK   
 ---------------------------

(?) 2025/06/20(金) 20:06:54


Copilot より
もしブックBのマクロを編集できるなら、MsgBox に表示する値を配列や変数に格納しておき、ブックAからその値を取得して転記するのが最もスマートです。
(Copilot) 2025/06/22(日) 20:57:33

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.