tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルExcelのウィンドウハンドルのとりかた。
記事No12243
投稿日: 2008/05/11(Sun) 17:57
投稿者戸豚
間抜けた質問ですみません。
Excel 2000 SR2、Windows 2000 Pro SP4のVBAでWindowsAPIを使っているのですがその引数の中でウィンドウハンドルを使う物があります。
具体的にはフォルダ選択ダイアログ SHBrowseForFolder()でBROWSEINFO構造体がオーナーハンドルを要求します。
リファレンスにしているのが技術評論社の「Visual Basic6.0 300の技 API+COM編」なんですが、そのサンプルは

.hwndOwner = Me.hwnd

の1行で済んでいます。
VBAだとMeには hwnd メンバーがなく、Excelのウィンドウハンドルを使おうと思ったのですが、

VBAでの書き方(どこのオブジェクトにあるか)がわからない

という基本的なところで躓いてしまいました。
ヘルプやMSDNを参照してもそれらしいメンバーが無くて悩んでいます。
フォルダ選択ダイアログに限定しません。
ウィンドウハンドルが必要になるようなAPIを使おうと思ったときは、どこからハンドルを持ってくれば良いんでしょうか?

[ツリー表示へ]
タイトルRe: Excelのウィンドウハンドルのとりかた。
記事No12246
投稿日: 2008/05/11(Sun) 19:21
投稿者花ちゃん
> VBAだとMeには hwnd メンバーがなく、Excelのウィンドウハンドルを使おうと思ったのですが、
>
> VBAでの書き方(どこのオブジェクトにあるか)がわからない

VBA のヘルプで hwnd を検索すれば、出てくると思うのですが?。

そこで、Hwnd プロパティ の 対象や 使用例 を参考に。

試してはいませんが、特に指定しなくても、下記のように 0 を指定しても動作する
ようです。(VBA SHBrowseForFolder で検索して、サンプルを見た限りでは)

hwndOwner = 0&

[ツリー表示へ]
タイトルRe^2: Excelのウィンドウハンドルのとりかた。
記事No12249
投稿日: 2008/05/11(Sun) 22:01
投稿者戸豚
回答ありがとうございます。

> VBA のヘルプで hwnd を検索すれば、出てくると思うのですが?。
>
> そこで、Hwnd プロパティ の 対象や 使用例 を参考に。

手持ちのExcelはOffice 2000 Professionalなんですがキーワードがヒットしませんでした。
MSDNだとVB6.0のサンプルばかりで、やっぱり「Me.hwnd」でして。
持ってるMSDNがVB6.0購入時の物なのでOfficeの記述が抜けてるだけかもしれませんが。

> 試してはいませんが、特に指定しなくても、下記のように 0 を指定しても動作する
> ようです。(VBA SHBrowseForFolder で検索して、サンプルを見た限りでは)
>
> hwndOwner = 0&

VBA、ウィンドウハンドル、といった検索ばかりでしたので、調べ方が悪かったようです。
でもハンドルに0って指定できちゃうんですね…
これ以上はWindowsAPI関連で調べてみます。

ありがとうございました。

[ツリー表示へ]
タイトルRe^3: Excelのウィンドウハンドルのとりかた。
記事No12250
投稿日: 2008/05/11(Sun) 22:55
投稿者neptune
こんにちは

Excel ApplciationのMainWindowをOwnerに指定したいわけですね。

過去ログをExcelのクラス名「XLMAIN」で検索したら沢山そのもの
ズバリがありますよ。

[ツリー表示へ]
タイトルRe^3: Excelのウィンドウハンドルのとりかた。
記事No12251
投稿日: 2008/05/12(Mon) 07:09
投稿者花ちゃん
> 手持ちのExcelはOffice 2000 Professionalなんですがキーワードがヒットしませんでした。

Excel 2000 の環境が用意できませんので確認しておりませんが、Excel 2002 では
確認がとれています。

下記のMSDN では、Excel 2000 のVBA ランゲージ リファレンスが表記されていないので
Excel 2000 でサポートされているかは解りません。

http://msdn.microsoft.com/ja-jp/library/cc363119.aspx   Excel 2002
http://msdn.microsoft.com/ja-jp/library/cc387509.aspx      Excel 2003

Application.Hwnd

いずれにしても、 0 でも動作するはずですので、API 関数を使ってまで取得する必要が
ないのでは。

[ツリー表示へ]
タイトルRe^4: Excelのウィンドウハンドルのとりかた。
記事No12252
投稿日: 2008/05/12(Mon) 08:50
投稿者戸豚
neptuneさんありがとうございます。
やっぱりハンドルが必要ならWindowsAPIで取得なんですね。


花ちゃんさん。
Excel 2000以降は下位互換が保たれている様ですけど色々拡張されてるようで、Excel 2003で動いたマクロが2000で動かない、なんとかしてくれ、なんて話しもありましたし。
そろそろExcel2000はリプレースするべき時期なのかもしれません。
懐に余裕がないので先送りですが…

[ツリー表示へ]