[[20210802152437]] 『別のアプリケーションからVBA]に制御を戻したい』(はち) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『別のアプリケーションからVBA]に制御を戻したい』(はち)

社内で使用しているシステムで検索を行うマクロを作成しています。
APIのFindWindowやSendMessageを使用して検索ができるように
なりました。

しかし、検索結果が見つからなかった場合、「該当データはありません」と
メッセージボックスが表示され、手作業で「OK」を押すまで制御が
戻ってきません。

「OK」ボタンを押すコードは準備できているのですが、制御がVBA側に戻らないので
実行されずに困っています。何か手立てはないものでしょうか?

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


# 質問趣旨を誤解していたので取り消します。( 8/3 8:06 )

(γ) 2021/08/03(火) 00:03


社内の検索システムを、vbaから利用ですか?

検索終了待とのかねあいありますが

「該当データはありません」と表示される
メッセージボックスの FindWindow 探して
コマンドボタンのハンドルに、BM_CLICK
むりかな?
(あい) 2021/08/03(火) 02:46


 回答ではなく、単なる興味に近いのですが、
 そのシステム開発はどんな言語というかどんな開発環境でやってるんでしょう
(´・ω・`) 2021/08/03(火) 09:41

ご回答感謝いたします。また、返信が遅くなり申し訳ありません。

あい様
 ご回答の通りなんですが、メッセージボックスのハンドルを探して
 「OK」をクリックするコードは準備できています。
 ・・が、VBA側に制御が戻らないので実行できないのです。

(´・ω・`)様
 詳細はシステムを開発した部署に聞かないとわかりませんが
 ベースはC++で作成されているようです。

(はち) 2021/08/03(火) 12:30


 ExcelVBAからC++で作成された社内システムをごにょごにょして、
 システム側からExcelにデータを引っ張ってくるみたいなことをしようとしているわけですか。

 そうだとして、制御がExcelVBA側に戻ってこないなら、VBAでできることは無いような気がします。

 姑息的手段としては、
 検索をする前に、必ずヒットするダミーデータを突っ込んでおくという方法が考えられますね。
 処理の後でダミーデータを間違いなく消すことが必要になりますが、
 というか、ダミーデータを入力していいかどうか許可をとるのがハードル高いかもしれません。
(´・ω・`) 2021/08/03(火) 13:57

ご回答感謝いたします。

(´・ω・`)様
 VBAではムリですかぁ。
 検査がヒットしなければヒットしない場合の流れを組むのでダミーデータ案は
 残念ながら意図しません。
 なにか別案を考えてみます。

(はち) 2021/08/04(水) 08:35


 >検査がヒットしなければヒットしない場合の流れを組むのでダミーデータ案は
 >残念ながら意図しません。

 えっと、ヒットしたのがダミーデータだけなら、
 検索がヒットしてないと判断できるでしょって話なんですが。
 ダミーデータに対して検索後の処理しちゃだめでしょ
(´・ω・`) 2021/08/04(水) 08:46

手動で「OK」をクリックすると、VBAに制御は戻りますか?
単に、VBA側の処理は終わってしまっているのでは?
(ハヤシライス) 2021/08/04(水) 09:13

検索開始、BM_CLICKの次の行に、メッセージボックス記入してたとして

検索ヒットした時に、処理が戻り表示されるて、ことか?
(あい) 2021/08/04(水) 09:19


ご回答感謝いたします。

(´・ω・`)様
 情報不足ですみません。システムにデータを登録する権限を持っておらず、参照のみ可能な
 状態です。

ハヤシライス様
 はい、手動で「OK」を押すと制御は戻ります。
 検索値がなかった場合は配列にデータが格納されません。

あい様
 その通りです。検索がヒットした際はシステム上のリストビューに結果が表示されるため
 結果を取得して配列に格納します。
 つまり制御がVBA側に戻り、処理を継続できます。メッセージボックスの場合も同様です。

(はち) 2021/08/04(水) 10:56


1案として、社内システムから検索、取得、csv吐出しをVBSに任せて、
VBAではループ待機するのはどうでしょうか。
(tkit) 2021/08/04(水) 11:43

うまくいくかわからないが、マルチスレッド

検索開始前にOKクリックするexcelを起動
戻ってきたら破棄

使ったことないので情報だけ、、

https://excel-ubara.com/vba_class/VBA_CLASS_06.html

(あい) 2021/08/04(水) 12:07


ご回答感謝いたします。
いろいろ試していて返信が遅くなりました。申し訳ありません。

tkit様
 VBSを利用するのは盲点でした。試行錯誤していたところ、「検索」ボタンを押す直前に
 「該当データはありません」と表示されるメッセージボックスを検知、「OK」を押下するVBSを
 実行することで無事に検知でき、VBA側にも制御が戻りました。
 VBSでAPIを扱うのは大変でしたが何とかできました。ありがとうございました!

あい様
 マルチスレッドも考えてもみませんでした。
 こちらはまだ試せてないので試してみようと思います。

(はち) 2021/08/05(木) 11:40


コメント返信:

[ 一覧(最新更新順) ]


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