いつもお世話になってます。
早速質問なのですが、VBからエクセルを起動して、VBAで作成したフォーム1の
コマンドボタン1をクリック(押す、離す)させたいのですが、どうすればいいのでしょうか?
自分で調べたところ、
1、コントロールのハンドルを取得する
2、SendMessageで○○○を送る
というところまで解ったのですが
1、親ウィンドウのハンドル(エクセル)は取得できたのですがその中のフォームのハンドル
(子ウィンドウ?)が取れない
EnumChildwindowsで取れるらしいのですが、第二と第三引数に
何を指定すればいいのか解らない
2、仮に子ウィンドウのハンドルが取れてもSendMessageで何を送ればいいのか解らない。
第二、第三、第四引数に何を指定すればいいのか解らない。
特に第二引数の「送信するメッセージを指定します」(ヘルプ引用)
(心の声:なんでもいいのかな?例えば "ボタン押せ" とか・・・
でも型がLongだから数字だし
それとも、探しているうちに見かけたWM_とかの意味不明な定数?
定数って説明されているのになんで書く人がconstつけて宣言しなきゃならない!
それって定数じゃなくて変数じゃん!!!)
すいません、かなりぐちりました・・・(汗
とりとめない文章になってしまいましたがどなたかご教授お願いいたします。
環境等書いていませんでした。
VB6 xpPro エクセル2000 です。
あと、コマンドボタンって孫ウィンドウに該当するんですか?
親:エクセル
子:フォーム
孫:コマンドボタン
・・・?
OfficeアプリはIAccessibleと親和性が高いので
WM_GETOBJECTメッセージ(SendMessage)を投げて、
ObjectFromLresultでユーザーフォームの参照を
受け取るのが正道でしょう。
IAccessibleのaccDoDefaultActionメソッドで
クリックさせるとかも。
熊谷隆史さん
レスどもです。
なるほど、IAccessible・・・こんなものがあるのですか
調べて使ってみます〜
> なるほど、IAccessible・・・
> こんなものがあるのですか
> 調べて使ってみます〜
Active Accessibility 2.0 SDK Tools
http://www.microsoft.com/downloads/details.aspx?familyid=3755582A-A707-460A-BF21-1373316E13F0
AccExplorer32.exeで確認すればクリックできるのが
お分かりになると思います。
後はこちらでも回答されてる魔界の仮面弁士さんの
ブログを参考にされるとか。
http://yaplog.jp/orator/archive/10
http://yaplog.jp/orator/monthly/200303/
ユーザーフォームのウィンドウハンドルを取得(FindWindow)。
AccessibleObjectFromWindowでIAccessibleを取得。
accDoDefaultActionメソッドでクリック。
コマンドボタンはウィンドウを持っていません。
(リストボックスやフレームなど、
ウィンドウを持っているものは限られています)
# 何かどこか、他人の空似を感じる。
熊谷隆史さんレスありがとございます。
返信遅くなりましてすいません。
いろいろなやり方があってかなり消化不良気味に
なりつつあるので、一つずつ処理していきたいと思います。
ありがとうございました(ぺこり