2013-03-06 157 views
1

我有一个可用的Perl脚本,我想将其转换为VBA以在Excel宏中运行,以便可以轻松地将其共享到其他PC。我有一个shell脚本(我传递参数)驱动perl脚本。 我使用Perl脚本从一个固定宽度的文件(下面的开始是54,63)读取所有数据行的每个指定列,并将该数据与另一个文件进行比较并打印其差异。我会在Shell脚本中传递参数作为runpro.pl filea.txt fileb.csv > myoutput.txt 任何协助都会很棒!特别是如果有人能够让我指向正确的方向,因为代码非常简单。谢谢!将Perl脚本转换为VBA脚本

#!/usr/bin/perl 
#Perl Script runpro.pl 
#*************************************************** 

use strict; 
use warnings; 

my ($fa, $fb) = @ARGV; 

@ARGV = $fa; 
my %codes; 
while(<>) { 
s/[\r\n]+\z//; 
$_ = substr($_, 54, 63); 
s/\s+\z//; 
next if $_ eq ""; 
$codes{$_} =1; 
} 

@ARGV = $fb; 
my %descrip; 
while(<>) { 
s/[\r\n]+\z//; 
s/,.*//; 
s/"//g; 
$descrip {$_} = 1 if s/^1234//; 
} 

for (sort keys %codes) {$ 
print "$_\n" unless ($descrip{$_}); 
} 
+0

您可以举一个例子说明如何使用VBA函数 - 您如何传递参数以及您希望输出的位置?从你的问题来看并不完全清楚...... – Floris 2013-03-06 20:23:11

+0

我用上面的例子编辑过。谢谢。 @Floris – todayspresent 2013-03-06 20:47:36

+0

选中此项:http://docs.activestate.com/activeperl/5.6/faq/Windows/ActivePerl-Winfaq12.html“如果您在Microsoft Office中录制宏,通常可以直接将其转换为Perl。” – isomorphismes 2013-03-21 23:29:15

回答

1

几个要点:

1)VBA是在Perl很不同 - 这样的事情是在一个单行将在其他

2是棘手的)如果您在Excel中没有使用过VBA,我建议你先开始“录制”一个宏(首先让功能区中的“Developer”选项卡可见,然后选择“录制宏”,然后开始执行诸如打开文件,导入它们宽度)当你停止录音后,你会看到做这些事情的语法 - 这应该会有很大的帮助

3)您将必须决定如何将参数传递给工作表上的VBA - 单元格,对话框......没有“从命令行运行VBA”这样的事情。

我想知道你是否真的需要/想要VBA,或者如果你最好编译一个独立的程序(.exe)。这是否意味着在PC(Windows),Mac OS或两者上运行?例如this earlier question - 也许这就是你实际需要的(如果不是你要求的...)?