VBA シェル オブジェクトの呼び出し時の構文エラー

VBA シェル オブジェクトの呼び出し時の構文エラー

私の VBA スクリプトでは、別の .vbs スクリプトを作成し、そのスクリプトに 1 行のコードを書き込むコードを記述しました。

コードは次のとおりです:

Set a = fs.CreateTextFile("C:\Users\user\documents\invis.vbs", True)
    a.WriteLine ("CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False")
    a.Close

コードはすべて正しく、完全に機能していると思いますが、修正できない構文エラーがあります。エラーは次の行にあります:a.WriteLine ("CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False")具体的には、この部分です: ("Wscript.Shell")。構文エラーは、 を引用符で囲んでいるために発生しますWscript.shell

「リスト区切り記号または)を使用してください」という強調表示された構文エラーが表示されます "Wscript.Shell"

「 」を削除すると構文エラーはなくなりますが、スクリプトが機能するには「 」が必要です。

これを修正するにはどうすればいいでしょうか?

答え1

この回答は VBS ではなく JScript を使用しているため、気に入らないかもしれません。以前は、それらを相互に変換するツールがありましたが、それが今どこにあるかわかりません。

私たちは VBS が嫌いです。どちらも同じ WSH エンジンで実行されます。VBS は、SAFEARRAY (JS では面倒な作業) を扱うものを使用する必要がある場合に便利です。一部の COM 呼び出しには SAFEARRAY が必要ですが、JS から実行することはできますが、コードが巨大で見苦しくなります。VBS では、すべてが内部でラップされます。その一例は、WMI で呼び出す可能性のある関数の一部が、引数リストを設定するために SAFEARRAY を必要とすることです。

これを書いたところ、問題なく動作しました。

var oFso = new ActiveXObject("Scripting.FileSystemObject");
var oTextFile = oFso.CreateTextFile("C:\\Users\\user\\documents\\invis.js", true);
oTextFile.WriteLine("var oShell = new ActiveXObject(\"WScript.Shell\");");
oTextFile.WriteLine("oShell.Run( WScript.arguments(0), 0, false )" );
oTextFile.Close();

もう一度、JS については謝罪しますが、(私見ですが) 同じことを実行するクリーンな代替手段がある場合、VBS はひどい言語です。

注目すべき点の 1 つは、コードに「ワンライナー」は必要ないということです。ワンライナーを使用すると、コードが読みにくくなるだけで、何も解決しません。

関連情報