我正在尝试使用excel 2010 vba
更新变量,这些变量在运行batch
中代码的perl
文件中使用。下面是更新每个变量的VBA
和没有变量的perl
代码是有效的代码。使用变量批处理文件可以快速打开和关闭,因此语法似乎是错误的。即使我删除@echo off
,我也无法查看错误。谢谢你:)。
VBA
'Update values and call perl
Dim var1 As String
Dim var2 As String
Dim var3 As String
Dim var4 As String
var1 = MyDirectory
var2 = MyDirectory & "sample_descriptor.txt"
var3 = "C:\cygwin\home\cmccabe\test_probes8.txt"
var4 = MyDirectory & "output.txt"
Set wshell = CreateObject("wscript.shell")
wshell.Run Chr(34) & "C:\Users\cmccabe\Desktop\EmArray\Design\spikein.bat"
perl代码(无变量)
perl get_imagene_spikein_probe_values.pl "N:\1_DATA\MicroArray\NexusData\555_7-2-2015" "sample_descriptor.txt" < test_probes8.txt > "N:\1_DATA\MicroArray\NexusData\555_7-2-2015\output.txt"
perl代码(带变量)
perl get_imagene_spikein_probe_values.pl "%var1%" "%var2%" < %var3% > "%var4%"
批处理文件
@echo off
perl "C:\cygwin\home\cmccabe\get_imagene_spikein_probe_values.pl" "%var1%" "%var2%" < "%var3" > "%var4%"
答案 0 :(得分:1)
您的代码失败,因为它将VBA局部变量与Windows环境变量混淆。您在VBA宏中设置的变量对批处理文件不可见,因为批处理文件完全不知道VBA环境。
您可以解决此问题(例如,通过在VBA脚本中设置环境变量进行系统调用);然而,更大的问题是你的设计毫无意义。 没有理由让VBA和批处理文件涉及运行Perl脚本的任务,这样做会增加不必要的复杂性。
正如其他人所说,为什么不简单地使用Perl来完成任务?
如果您的Windows用户不熟悉命令行参数,只需为每个所需的文件名创建脚本提示。我也会让你的脚本直接使用输入和输出文件,而不是要求重定向STDIN和STDOUT。如果你这样做,那么你可以为你的脚本创建一个快捷方式,并有一个非常简单的方法来访问它。
如果某些用户想要在命令行上使用该脚本,您可以接受两种输入模式:
my $directory;
my $descriptor;
my $input_file;
my $output_file;
#
if (@ARGV == 4)
{
$directory = $ARGV[0];
$descriptor = $ARGV[1];
...etc.
}
else
{
print "Enter directory name: "
$directory = <>;
chomp $directory; #remove newline
...etc.
}