プロが教える店舗&オフィスのセキュリティ対策術

エクセル2003VBAにて、ファイルを開くダイアログのハンドルを取得したいのですができません。

ファイルを開くダイアログの入力欄に、
ファイルパスを入れようと思っているのですが、
ファイルを開くダイアログのウインドウハンドルが取得できません。
下記コードのhDlgの値が0となってしまいます。


'最前面(ファイルを開くダイアログ)のウィンドウハンドル取得
hDlg = FindWindowA("#32770", "Open")
'ファイル名入力欄のハンドルを取得
hInput = FindWindowExA(hDlg, 0, "Edit", vbNullString)


ファイルを開くダイアログのウィンドウハンドルをどうやってとるのか、
教えていただけないでしょうか。
お手数をおかけしますが、どうぞよろしくお願いいたします。

A 回答 (2件)

一応、自分の力量に合わせた質問をしたほうがよいです。

ご質問者さん自身が常連ですから、お互いに経験的に蓄積していくものです。やっぱり、こちらの、#6249936のアドバイスにしても、そんなにバカな回答をしているつもりはありません。ここカテゴリの回答のレベルが凋落しているのは間違いありませんが、それでも、ある程度回答のベルは信頼してよいと思います。インターネット検索で拾ってくるようなテクニックだけ求められても回答はしにくいのです。

>hDlg = FindWindowA("#32770", "Open")
それに、このダイアログのその番号は、CommonDialog だったような気がしますが、Excel なら違います。Excelのオープンダイアログのクラスは、"bosa_sdm_XL9" のはずです。

しかし、その後は取れません。なぜ、そんなテクを求めるのか、知らないからだとは思いますが、もしそうでないとしたら、#1のimogasiさんのおっしゃるように、「範囲外の事項」だと思います。

>ファイルを開くダイアログの入力欄に、
>ファイルパスを入れようと思っているのですが

私なら、こういうようにしますね。

Application.Dialogs(xlDialogOpen).Show "C:\"

ChDir を使う場合もあります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
Excelのダイアログの勉強になりました。

私の質問が言葉足らずで申し訳ないです。
とあるメーカーのソフトのファイルを開くダイアログのEdit欄に、
自動でファイル名を入力しようと思い質問をしました。

いろいろとためしたのですが、
Sendkeyはたまにナムロックがかかり不具合を起こすので、
ウィンドウハンドルを取得し、postmessageでファイル名を入れようと思いました。
Do
 ・・・
 Sleep 1000
Loop Until hDlg <> 0
を入れてみたところウィンドウハンドルが取得できました。

お礼日時:2010/11/05 10:39

VBAではウインドウハンドルを取得して、何かをすると言うのは、範囲外の事項です。


そういうものはここに質問するのでなく、自分でWEB照会するなり、本を読むなりして自分で、勉強すべき事項と思う。
まず、何をしたいのか、ウインドウハンドルの問題にしないと処理できないのか質問してみたら。
    • good
    • 0
この回答へのお礼

>ウインドウハンドルの問題にしないと処理できないのか質問してみたら。
そうですね。質問してみます。
回答ありがとうございます。

お礼日時:2010/11/05 10:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!