如何将值从Batch传递到Excel VBA宏?

时间:2015-01-07 17:17:44

标签: c# excel excel-vba batch-file vba

我有一个生成CSV文件的C#程序,然后在Excel中打开一个XLSM文件(使用ProcessStartInfoProcess.Start)。 XLSM中的宏加载CSV文件并将数据从其分发到特定单元格。最终这将是C#生成一个没有宏的电子表格,可以在任何办公套件中加载,CSV将会消失。

我的问题是此系统现在需要支持从磁盘上的任何位置运行XLSM。它通过硬编码的相对路径找到CSV,该路径不在用户指定的位置工作。我想做一些类似于传递编译器参数来定义常量的东西。

编辑1:

我考虑和拒绝的替代方法:

  • 将XLSM复制到CSV附近的标准位置并从那里运行。

    我需要将文件复制回原来的位置,但我不知道Excel何时关闭...除了可能在Excel中,但它不知道原始位置因此这个问题。

  • 在用户指定的XLSM位置旁边创建CSV文件。

    CSV文件的位置在NLOG配置文件中指定,并且更改周围的实现以使用硬编码路径将是昂贵的。这是我唯一能够发挥作用的想法,但它会受到伤害。

  • 从标准位置创建指向自定义位置的基于Windows的硬链接。

    我不能假设我在NTFS文件系统上运行。

1 个答案:

答案 0 :(得分:1)

将CSV生成程序移植到用户计算机上:

  • 将用户计算机上的环境变量设置为目标目录;例如(cmd行)SET CSVPATH=C:\My\CSV
  • 让CSV处理XLSM中的宏使用Environ()函数读取此环境变量;例如(VBA)MyPath = Environ("CSVPATH") & "\"

或者,你可以

  • 在"安装XLSM"中使用目录选择对话框。使用SaveSetting语句将正确的文件路径写入目标计算机的注册表
  • 让CSV处理XLSM中的宏使用GetSetting()函数读取注册表以获取正确的路径