VBAやDOSコマンドでのダブルクォーテーションのエスケープ
VB6,VBS,VBAやDOSコマンドでの文字列はダブルクォーテーションで挟んで表現します。しかし、文字列中にダブルクォーテーションがある場合は、どうするかというとダブルクォーテーションの前にもう一つダブルクォーテーションを置きます。単純なことだと思いますが…、実際は結構複雑です。
たとえば、あるDOSコマンドの引数に文字列がある場合で、VBAからそのDOSコマンドを発行した場合、以下の感じになります。
(VBAのソース上) strTN = "XXX20060812120000" strCMD = "C:\XXXMail\XXXMail1.xls" strWkcmd = Environ("ComSpec") & " /c ""schtasks /create /TN " & strTN & " /TR " & """""" & strCMD & """""""" (DOSコマンドのソース上) C:\WINDOWS\system32\cmd.exe /c "schtasks /create /TN XXX20060812120000 /TR ""C:\XXXMail\XXXMail1.xls""" (注意:上記コマンドは、見やすくするため、かなりオプション記述を省略しています。詳しくは、schtasksのリファレンスを参照のこと)
上記のように"""""" & strCMD & """"""""となると結構複雑になります。解析の基本は、ダブルクォーテーションはダブルクォーテーションでエスケープする…です。
追記:DOSコマンド内のダブルクォーテーションは、そのコマンドがとのようにダブルクォーテーションを解釈するかによって、へたにエスケープするとエラーになったりします。
したがって、実際に試行錯誤して動作確認が必要です。
とにかく、ダブルクォーテーションエスケープに関して、VBからDOSコマンドを発行するときは、VBの仕様、WINDOWSの仕様、DOSコマンドの仕様が複雑に絡み合っていますので、細心の注意が必要です。