[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『別のアプリケーションからVBA]に制御を戻したい』(はち)
社内で使用しているシステムで検索を行うマクロを作成しています。
APIのFindWindowやSendMessageを使用して検索ができるように
なりました。
しかし、検索結果が見つからなかった場合、「該当データはありません」と
メッセージボックスが表示され、手作業で「OK」を押すまで制御が
戻ってきません。
「OK」ボタンを押すコードは準備できているのですが、制御がVBA側に戻らないので
実行されずに困っています。何か手立てはないものでしょうか?
< 使用 Excel:Excel2016、使用 OS:Windows10 >
(γ) 2021/08/03(火) 00:03
検索終了待とのかねあいありますが
「該当データはありません」と表示される
メッセージボックスの 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
検索ヒットした時に、処理が戻り表示されるて、ことか?
(あい) 2021/08/04(水) 09:19
(´・ω・`)様
情報不足ですみません。システムにデータを登録する権限を持っておらず、参照のみ可能な
状態です。
ハヤシライス様
はい、手動で「OK」を押すと制御は戻ります。
検索値がなかった場合は配列にデータが格納されません。
あい様
その通りです。検索がヒットした際はシステム上のリストビューに結果が表示されるため
結果を取得して配列に格納します。
つまり制御がVBA側に戻り、処理を継続できます。メッセージボックスの場合も同様です。
(はち) 2021/08/04(水) 10:56
検索開始前に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.