使用excel 2010更新批处理文件

时间:2015-12-01 22:14:58

标签: perl excel-vba batch-file vba excel

我正在尝试使用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%"

1 个答案:

答案 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.
}