えくせるちゅんちゅん

ことりがエクセルをちゅんちゅんするブログ

SpecialFoldersの引数にString型変数を指定すると意図した通りに動かない

思わぬ挙動でびっくりしたので書き残しておく

詳しい本文はまた今度追記する。

何らかの演算をすることで、Variantに暗黙的に変換されるんだろうな。

'SpecialFoldersの引数にString型変数を指定すると誤動作する。
Sub Test_SpecialFolders()
    With CreateObject("Wscript.Shell")
        Debug.Print .SpecialFolders("AllUsersDesktop")  'C:\Users\Public\Desktop
        Debug.Print .SpecialFolders("Desktop")          'C:\Users\[ユーザー名]\Desktop
        
        Dim sDesktop As String
        sDesktop = "Desktop"
        
        Debug.Print .SpecialFolders(sDesktop)           'C:\Users\Public\Desktop        ←!?
        
        Debug.Print .SpecialFolders("" & sDesktop)      'C:\Users\[ユーザー名]\Desktop
        Debug.Print .SpecialFolders(CStr(sDesktop))     'C:\Users\[ユーザー名]\Desktop
        Debug.Print .SpecialFolders(CVar(sDesktop))     'C:\Users\[ユーザー名]\Desktop
        
        Dim vDesktop As Variant
        vDesktop = "Desktop"
        Debug.Print .SpecialFolders(vDesktop)           'C:\Users\[ユーザー名]\Desktop
    End With
End Sub

この挙動は最近よく見かける下記の件と同じ原理のような気がする。

www.excel-chunchun.com


この前、InStrでも目撃したよね。

VBAのInStr関数の不思議な挙動について調べてみた - えくせるちゅんちゅん

プライバシーポリシー