- ベストアンサー
【BrowseForFolderでデスクトップを選択した時の不具合】
VBAで開発していますが、SHELL32.DLLのBrowseForFolder関数(フォルダ選択)を使用した時に、フォルダ選択画面で、例えばデスクトップとか、マイコンピュータを選択した時に、戻り値に不具合があるようです。 どなたか、同じようなことで調査されたことがある方、アドバイスをお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 BrowseForFolderは使ったことありませんが・・。(^^;;; Excel VBAなら例えば新しいブックで以下のような簡単なコードを試してみたらどうですか? ----------------------------------------------- Sub Test() Dim objShell As New Shell Dim objFolder As Folder Const BIF_RETURNONLYFSDIRS = &H1 Set objFolder = objShell.BrowseForFolder(0, _ "Select Folder", BIF_RETURNONLYFSDIRS) If Not objFolder Is Nothing Then MsgBox objFolder.Items.Item.Path End If End Sub --------------------------------------------- それから、 >戻り値に不具合があるようです。 と言われても読む人にはどのような不具合なのか見当もつかないと思いますが・・・。(^^;;; 以上です。
その他の回答 (2)
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
FolderItemsオブジェクトに対して引数を省略してItemメソッドをお使いですね。 Itemメソッドは引数が省略可能となっていますが、引数を省略した場合の返値は定義されていませんので、実際には引数を省略することはできません。 この例では、objFolder.Items.ItemがたまたまFolderItemを返せばエラーになりませんが、FolderItemを返さない場合はエラーになります。
お礼
回答ありがとうございます。 Itemのパラメータですが、INDEXは何を設定すればいいのか教えて頂けますでしょうか?
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
Windows 2000とWindows XPで試してみましたが、どちらの環境でデスクトップやマイコンピュータを選択しても戻り値に不具合はありませんでした。 不具合が発生する最小限のプログラムコードを作成して、補足として書いてみてください。
補足
現状戻り値が正しく取得できないロジックです。 宜しくお願いいたします。 Private Sub cmd_Folder_Click() Dim objShell As New Shell Dim objFolder As Folder Dim lnghwnd As Long 'ウィンドウハンドル On Error Resume Next Me.Caption = GSFRM002 'ウィンドウハンドル取得 lnghwnd = FindWindow(vbNullString, GSFRM002) ' フォルダ選択ダイアログを表示 Set objFolder = _ objShell.BrowseForFolder(lnghwnd, _ "フォルダを選択してください。", _ BIF_RETURNONLYFSDIRS) Set objShell = Nothing ' 選択内容を取得 If Not objFolder Is Nothing Then With objFolder Me.lbl_Folder = .Items.Item.Path End With Set objFolder = Nothing End If End Sub
お礼
質問が具体的じゃなくて、ご迷惑をおかけいたしました。 ロジックを取り込んでみたところ、正常動作しました。 どうもありがとうございました。