●やりたいこと
ExcelVBAで、APIを実行し、外部ソフトのウィンドウに含まれている
エディットテキストを取得して、セルに出力したい
使用する関数・宣言、できればコードを教えていただけませんでしょうか。
イメージはこちらをご参考いただけると幸いです。
http://situmon-img.blogspot.com/2008/08/1.html
変数hwindowに親ウィンドウのハンドルが取得されています。
エディットボックスのハンドル、IDは分かりません。
エディットボックスのハンドルを取得し、
分かっているクラス・ハンドルの文字列を取得
といった流れになるのではと思っております。
変数にさえ文字列が取得できれば、
当然ですが、Range("B2")=変数 で大丈夫です。
変数は、ひとつを使いまわしで構いません。
変数をエディットテキストの数だけ用意しても構いません。
No.3ベストアンサー
- 回答日時:
あの QNo.4256138の質問でも、同じ様な事を質問されていたと思います。
出来たらそちらで質問された方がよかったのではと思います。
テキストボックスの取得も、私の回答した全く同じ方法で
取得出来ると思います。クラス名が Edit になるだけです。
EnumChildWindows(hWnd,lpEnumFunc,0&) は、親ウィンドウに含まれる
子ウィンドウがすべて返ってきます。ボタンもテキストボックスも、その他の
子ウィンドウがすべて、何個あっても、取得できます。
ただ EnumChildWindows(hWnd,lpEnumFunc,0&) で与える子ウィンドウを
受け取る関数は、コールバック関数なので、1回のコールで1個の子ウィンドウ
しか返ってきません。ただ、子ウィンドウがある分だけ何度も同じ関数が
呼び出されます。よび出される度に
GetClassName(hWnd,lpClassName,nMaxCount) でクラス名を取得し
クラス名が Edit ならテキストボックスになります。
SendMessage(テキストボックスハンドル, &HD, 240, ByVal cbuf)
で cbuf にテキストボックスの文字が取得出来ます。
尚、cbuf は文字長を多い目に事前に確保しておきましょう。
cbufのNULL値までが実際の文字となります。
また、コールバック関数はデバッグモードで、ブレークさすと、
フリーズするので注意して下さい。通常はデバッグしにくいので、
コールバック関数内では、配列変数にハンドルをためこんでいきます。
その後で、配列にためこんでいるハンドルを順番にクラス名を取得し
テキストがボタンか判断していきます。
度々ご返答いただき誠にありがとうございます。
具体的で即使えるように記載いただき非常に助かります。
基本を勉強してないのでエラーしまくりですが、何とか進めております。
No.4
- 回答日時:
#3の回答者です。
EnumChildWindows(hWnd,lpEnumFunc,0&) で登録した子ウィンドウを
受け取る関数は、その関数を終了する時に TRUE を返す様に
しないと、全ての子ウィンドウのハンドルを受け取れませんので
注意して下さい
No.2
- 回答日時:
No.1の回答者です。
誤:
FindWindowEx の第二パラメータに設定します)
正:
FindWindowEx の第4パラメータに設定します)
です。失礼しました。
No.1
- 回答日時:
まず、Spy++ や フリーウェア(Winspectorなど)を使って、エディットボックスのクラス名かキャプション名を得てください。
その後、FindWindowEx API を使って親から階層を手繰ってください。
例えば、親の1階層下に "Frame"クラスのコントロールがあり、さらにその中に対象とするエディットボックス "Edit" が存在するとしたら、
hFrame = FindWindowEx(親ハンドル, 0, "Frame", 0)
hEdit = FindWindowEx(hFrame, 0, "Edit", 0)
(尚、クラス名ではなくウィンドウキャプションで取得する場合は、FindWindowEx の第二パラメータに設定します)
ここまできたら、あとは
Dim strText As String
strText = Space(2048)
SendMessage(hEdit, WM_GETTEXT, strText, Len(strText))
strText = Left(strText, Len(strText)-1)
strText = Trim(strText)
という感じになるかと思います。
考え方だけですので適宜微調整はお願いしますね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- JavaScript javascriptで文字分割は、 split() などメソッド不要??? 4 2023/02/06 22:50
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- オープンソース Python openpyxlを使用したセル番地の使用について 1 2023/08/03 22:05
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
Excel VBAで他アプリケーションの文字列取得
Excel(エクセル)
-
EnumChildWindowsの使い方(VBA)
Visual Basic(VBA)
-
VBAでコントロールのハンドルを取得したい
Visual Basic(VBA)
-
-
4
親ウインドウにあるOKボタンを押す方法
Visual Basic(VBA)
-
5
WinAPIで電卓をクリック
Visual Basic(VBA)
-
6
他アプリケーション’(ウィンドウ)のハンドル取得方法
Visual Basic(VBA)
-
7
Alt+P,Alt+NをPostmessageで送るには
Visual Basic(VBA)
-
8
他のウィンドウのボタンを自動的に押したい
C言語・C++・C#
-
9
API32 コントロールのEditテキストの文字列の取得・出力について
Visual Basic(VBA)
-
10
他アプリの操作(メニューバー)
Visual Basic(VBA)
-
11
今更、VBAでRPA、キーボード操作自動化ってどうやるの?
Visual Basic(VBA)
-
12
ウィンドウにキー送信で ENTER を送りたい
Visual Basic(VBA)
-
13
vbaから他のアプリを終了
Visual Basic(VBA)
-
14
ウインドウハンドルのつかみ方について質問です。
Visual Basic(VBA)
-
15
別のアプリケーションのテキストフィールドに入力する方法
Visual Basic(VBA)
-
16
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
17
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
18
WSH or VBの質問
Visual Basic(VBA)
-
19
他のアプリケーションの終了処理
Visual Basic(VBA)
-
20
プロセスIDの取得方法について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
作成したウインドウのサイズを...
-
VBで外部プログラムを位置のみ...
-
ゲームでは結局どっちが良いの?
-
Excelの上下を固定したい
-
VBA .Value=.Value ?
-
ダイアログをスクロールさせるには
-
アクティブウインドウのIME...
-
勝手にウィンドウが開いて止ま...
-
【VB2008】 マウス操作の一時的...
-
最大化と最小化ボタン
-
他のアプリケーションの終了処理
-
c++/cli .NET Formアプリケー...
-
ラジオボタンの初期指定
-
ExcelのBOOKが消えた!
-
リモートデスクトップの中のウ...
-
VBA SendMessage 無限ループに...
-
メッセージをスルー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
勝手にウィンドウが開いて止ま...
-
ゲームでは結局どっちが良いの?
-
ラジオボタンの初期指定
-
VBA .Value=.Value ?
-
Excelの上下を固定したい
-
ExcelのBOOKが消えた!
-
他のアプリケーションの終了処理
-
Vba LongPtrについて教えてくだ...
-
作成したウインドウのサイズを...
-
UWSCで特定のChromeのタブをア...
-
[VBA] UserForm を Excel の W...
-
MFC ダイアログ上のID取得につ...
-
Alt+P,Alt+NをPostmessageで送...
-
「&HFFFF」「&H1A」とは?
-
ExcelVBAでAPIを使って外部ウイ...
-
親ウインドウにあるOKボタンを...
-
EnumChildWindowsの使い方(VBA)
おすすめ情報