如何将批量中的值传递给Excel VBAmacros?

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

我的问题是,这个系统现在需要支持从磁盘上的任何地方运行XLSM。 它通过一个硬编码的相对pathfindCSV,这不适用于用户指定的位置。 我想要做一些类似的传递一个编译参数来定义一个常量。

编辑1:

我已经考虑并拒绝的替代方法:

  • 将XLSM复制到CSV附近的标准位置,然后从中运行。

    我需要把文件复制回原来的位置,但是我不知道什么时候Excel被closures了。除了可能在Excel中,但它不知道原始位置,所以这个问题。

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

    CSV文件的位置在NLOGconfiguration文件中指定,并且将周围的实现更改为使用硬编码path将会很昂贵。 这是唯一的想法,可以工作,但会伤害。

  • 从标准位置创build一个基于Windows的硬链接到自定义位置。

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

将您的CSV生成程序移植到用户机器上,您可以:

  • 将用户机器上的环境variables设置为目标目录; 例如(cmd行) SET CSVPATH=C:\My\CSV
  • 让您的CSV处理XLSM的macros使用Environ()函数读取这个环境variables; 例如(VBA) MyPath = Environ("CSVPATH") & "\"

或者,你可以

  • 使用“安装XLSM”中的目录select对话框,使用SaveSetting语句将正确的文件path写入目标机器的registry
  • 让CSV处理XLSM中的macros使用GetSetting()函数读取registry以获取正确的path