• ベストアンサー

【BrowseForFolderでデスクトップを選択した時の不具合】

VBAで開発していますが、SHELL32.DLLのBrowseForFolder関数(フォルダ選択)を使用した時に、フォルダ選択画面で、例えばデスクトップとか、マイコンピュータを選択した時に、戻り値に不具合があるようです。 どなたか、同じようなことで調査されたことがある方、アドバイスをお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • taocat
  • ベストアンサー率61% (191/310)
回答No.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 --------------------------------------------- それから、 >戻り値に不具合があるようです。 と言われても読む人にはどのような不具合なのか見当もつかないと思いますが・・・。(^^;;; 以上です。

mari0629
質問者

お礼

質問が具体的じゃなくて、ご迷惑をおかけいたしました。 ロジックを取り込んでみたところ、正常動作しました。 どうもありがとうございました。

その他の回答 (2)

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

FolderItemsオブジェクトに対して引数を省略してItemメソッドをお使いですね。 Itemメソッドは引数が省略可能となっていますが、引数を省略した場合の返値は定義されていませんので、実際には引数を省略することはできません。 この例では、objFolder.Items.ItemがたまたまFolderItemを返せばエラーになりませんが、FolderItemを返さない場合はエラーになります。

mari0629
質問者

お礼

回答ありがとうございます。 Itemのパラメータですが、INDEXは何を設定すればいいのか教えて頂けますでしょうか?

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

Windows 2000とWindows XPで試してみましたが、どちらの環境でデスクトップやマイコンピュータを選択しても戻り値に不具合はありませんでした。 不具合が発生する最小限のプログラムコードを作成して、補足として書いてみてください。

mari0629
質問者

補足

現状戻り値が正しく取得できないロジックです。 宜しくお願いいたします。 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

関連するQ&A