VBAやDOSコマンドでのダブルクォーテーションのエスケープ

VB6,VBA,VBS,EXCEL,DOS,BAT,WSH,WORDの小技メモ

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ 燈明日記/ Perlノート/ 漢字起源/ yahoo

はじめに

本ページは、ウインドウズ系全般のティプスメモです。

そう、はじめは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掲示板へご指摘ください。

人のよいところをどんどん見つけよう