[リストへもどる]
一括表示

投稿時間:2003/01/06(Mon) 19:38
投稿者名:むろむろ
Eメール:
URL :
タイトル:
特殊フォルダのパス取得
初心者的なことだと思いますがお願いします。
当サイトの「特殊フォルダのパス取得」を参考に自分なりに変えてみました。

Private Sub Command1_Click()
    MsgBox (fSpecialFolder)
End Sub

Private Function fSpecialFolder() As String
'特殊フォルダのパス名を取得
    On Error Resume Next
    Dim objWsh     As Object
    'オブジェクト変数 objWsh に Wscript.Shell への参照を設定します
    Set objWsh = CreateObject("Wscript.Shell")
    If Err Then
        MsgBox "エラー(Wscript.Shellが使用できません?)"
    Else
        '特殊フォルダのパス名を取得
        ★1... fSpecialFolder = objWsh.SpecialFolders(Desktop)
        ★2... fSpecialFolder = objWsh.SpecialFolders(List1.List(List1.ListIndex))
    End If
    Set objWsh = Nothing
End Function

★2のようにフォームにリストを作成して、それの「Desktop」を選択して、実行すると
ちゃんと、ユーザー名のあとに「デスクトップ」が表示されるのですが、
★1のように直接「Desktop」を直接入力して、実行すると「AllUsers」のあとに
「デスクトップ」が表示されます。

結果的にやりたいことは、ユーザー名の後に「デスクトップ」を表示したいのですが、
いちいちフォームにリストを作りたくないのです。

どうしたらよいでしょうか?また、★1と★2では同じことをしている気がするのですが、
どこが違うのでしょうか?

投稿時間:2003/01/06(Mon) 20:29
投稿者名:Say
Eメール:
URL :
タイトル:
Re: 特殊フォルダのパス取得
「Desktop」は変数名ではなく、文字列なのではありませんか?

投稿時間:2003/01/06(Mon) 20:29
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 特殊フォルダのパス取得
>         ★1... fSpecialFolder = objWsh.SpecialFolders(Desktop)

この部分のコードはこのとおりなのでしょうか?
だったら fSpecialFolder = objWsh.SpecialFolders("Desktop") でないとエラーが発生して
取得できないかと思います。

私の環境では両方とも同じ値が取得できました。
WinXP  VB6.0(SP5)

# 何秒差だったのかな?(遅かった) 

投稿時間:2003/01/06(Mon) 20:33
投稿者名:NAO★
Eメール:
URL :
タイトル:
Re: 特殊フォルダのパス取得
> fSpecialFolder = objWsh.SpecialFolders(Desktop)

fSpecialFolder = objWsh.SpecialFolders("Desktop")
とダブルクォーテーションで囲んでください。

囲まないとバリアント型の0とみなされ、
0は"AllUsersDesktop" を指定したのと同じになるためこの現象が起こります

Option Explicit
を常に使用する癖をつけるとこのようなミスで悩むことは減るでしょう。

投稿時間:2003/01/07(Tue) 10:02
投稿者名:むろむろ
Eメール:
URL :
タイトル:
解決しました。
Say様、花ちゃん様、NAO様、いつも有難うございます。
ダブルクオーテーションで囲むことにより、解決しました。
以後、気を付けたいと思います。
有難うございました。