思わぬ挙動でびっくりしたので書き残しておく
詳しい本文はまた今度追記する。
何らかの演算をすることで、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
この挙動は最近よく見かける下記の件と同じ原理のような気がする。
この前、InStrでも目撃したよね。