はじめに
本ページは、ウインドウズ系全般のティプスメモです。
そう、はじめはVB系のティプスメモだったのですが…いつの間にか、ウインドウズ系全般のティプスメモになってしまいました。
ちなみに、ティプス(Tips)とは、マニュアルに書かれていない技法や裏わざのことですが、本ページでは、私が経験してこれはと思ったノウハウのメモになっています。
尚、以下は本サイトの最新情報(ブログ)です。
それでは、本ページが何かのお役に立てれば幸いです。ごゆっくりご覧ください。
◆ 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コマンドの仕様が複雑に絡み合っていますので、細心の注意が必要です
おわりに
以下のページには、すべてのTIPSがあります。もしよろしければ、どうぞ!
尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくVB-TIPS掲示板へご指摘ください。