VBからエクセル内のフォームにあるコマンドボタンを押すには?

解決


FOW  2008-02-12 09:54:10  No: 138937  IP: 192.*.*.*

いつもお世話になってます。
早速質問なのですが、VBからエクセルを起動して、VBAで作成したフォーム1の
コマンドボタン1をクリック(押す、離す)させたいのですが、どうすればいいのでしょうか?
自分で調べたところ、
1、コントロールのハンドルを取得する
2、SendMessageで○○○を送る
というところまで解ったのですが

1、親ウィンドウのハンドル(エクセル)は取得できたのですがその中のフォームのハンドル
    (子ウィンドウ?)が取れない
    EnumChildwindowsで取れるらしいのですが、第二と第三引数に
    何を指定すればいいのか解らない
2、仮に子ウィンドウのハンドルが取れてもSendMessageで何を送ればいいのか解らない。
    第二、第三、第四引数に何を指定すればいいのか解らない。
    特に第二引数の「送信するメッセージを指定します」(ヘルプ引用)
    (心の声:なんでもいいのかな?例えば  "ボタン押せ"  とか・・・
    でも型がLongだから数字だし
    それとも、探しているうちに見かけたWM_とかの意味不明な定数?
    定数って説明されているのになんで書く人がconstつけて宣言しなきゃならない!
    それって定数じゃなくて変数じゃん!!!)

すいません、かなりぐちりました・・・(汗

とりとめない文章になってしまいましたがどなたかご教授お願いいたします。

編集 削除
FOW  2008-02-12 09:56:25  No: 138938  IP: 192.*.*.*

環境等書いていませんでした。
VB6  xpPro  エクセル2000  です。

あと、コマンドボタンって孫ウィンドウに該当するんですか?
親:エクセル
子:フォーム
孫:コマンドボタン
・・・?

編集 削除
熊谷隆史  2008-02-12 14:53:14  No: 138939  IP: 192.*.*.*

OfficeアプリはIAccessibleと親和性が高いので
WM_GETOBJECTメッセージ(SendMessage)を投げて、
ObjectFromLresultでユーザーフォームの参照を
受け取るのが正道でしょう。

IAccessibleのaccDoDefaultActionメソッドで
クリックさせるとかも。

編集 削除
FOW  2008-02-15 09:16:48  No: 138940  IP: 192.*.*.*

熊谷隆史さん
レスどもです。

なるほど、IAccessible・・・こんなものがあるのですか
調べて使ってみます〜

編集 削除
熊谷隆史  2008-02-15 11:35:36  No: 138941  IP: 192.*.*.*

> なるほど、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メソッドでクリック。

コマンドボタンはウィンドウを持っていません。
(リストボックスやフレームなど、
 ウィンドウを持っているものは限られています)


# 何かどこか、他人の空似を感じる。

編集 削除
FOW  2008-02-20 10:25:10  No: 138942  IP: 192.*.*.*

熊谷隆史さんレスありがとございます。
返信遅くなりましてすいません。

いろいろなやり方があってかなり消化不良気味に
なりつつあるので、一つずつ処理していきたいと思います。

ありがとうございました(ぺこり

編集 削除