アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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
---------------------------------------------

それから、
>戻り値に不具合があるようです。
と言われても読む人にはどのような不具合なのか見当もつかないと思いますが・・・。(^^;;;

以上です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/06/30 09:38

FolderItemsオブジェクトに対して引数を省略してItemメソッドをお使いですね。



Itemメソッドは引数が省略可能となっていますが、引数を省略した場合の返値は定義されていませんので、実際には引数を省略することはできません。

この例では、objFolder.Items.ItemがたまたまFolderItemを返せばエラーになりませんが、FolderItemを返さない場合はエラーになります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/06/29 13:06

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

補足日時:2005/06/29 12:01
    • good
    • 0

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