私はVBAの範囲内でGnuplotを実行しています。それは驚くほどうまく機能します。私はGNUPLOTとWord VBAを使って、約100のグラフの本を作ることができます。 (Excelのグラフでは、おそらく約4になる可能性があります)GNUPLOTとVBA - STDERRはどこに行きましたか?
小さな問題が1つあります.VBAで実行すると、STDERRが消えるか、作成されていません。診断はありません。以下の小さなGNUPLOTスクリプトを考えると
、
set key bmargin left horizontal Right noreverse enhanced autotitle box lt black linewidth 1.000 dashtype solid
set samples 800, 800
set title "Simple Plots"
set title font ",20" norotate
DEBUG_TERM_HTIC = 119
DEBUG_TERM_VTIC = 119
plot [-30:20] sin(x*20)*atan(x)
私のVBAコードは、一時ファイルに書き込み、それを実行しようとします。 VBAはそうのように呼び出され、その後、Windowsシェルでそれを実行
"C:\temp\Gnuplot\bin\gnuplot.exe" C:\Users\VVKOZLOV\AppData\Local\Temp\gnuA5E0.txt 2>"C:\Users\VVKOZLOV\AppData\Local\Temp\gnuA5E2.err"
を生成します。その後、
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
wsh.Run x, 0, True ' x contains the generated GNUPLOT expression
GNUPLOTは完璧に実行されます。
GNUPLOT式では、最初の項目はGNUPLOTプログラムの場所で、私のシステムでは"C:\temp\Gnuplot\bin\gnuplot.exe"
になります。 2番目のファイルは、公式のMicrosoftの場所C:\Users\VVKOZLOV\AppData\Local\Temp\gnuA5E0.txt
で一時的に生成されます。最後に、STDERRの位置、2>"C:\Users\VVKOZLOV\AppData\Local\Temp\gnuA5E2.err"
があります。ここで2>は、これがSTDERRであり、通常の出力STDOUTではないことを示しています。
は、今私はgnuplotのソースに意図的にエラーを導入したと、私は
scooby doo where are you?
^
"C:\Users\VVKozlov\AppData\Local\Temp\gnuEC55.txt", line 4: invalid command
のようなものを含む書かれたエラーファイルを期待するVBAの外に通常のCMD.EXEで実行すると、STDERRファイルが作成されます予想通り。
Windowsシェルを使用してVBAの境界内で実行された場合、STDERRファイルは作成されません。
このSTDERRファイルをVBAでどのように作成することができますか?
'CmdLine =" CMD/S/C "" "&CmdLine&" "" "'のようなコマンドライン全体をラップします。これらは魔法の言葉です。 – Ben
も参照してくださいhttps://stackoverflow.com/questions/2075886/capturing-output-from-wshshell-exec-using-windows-script-host/9063149#9063149 – Ben
ありがとう、ベン。それらの魔法の余分な引用符です。 –