如何将 Batch 中的值传递给 Excel VBA 宏?

How can I pass a value from Batch to an Excel VBA macro?

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

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

编辑 1:

我考虑过但拒绝的替代方法:

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

  • 在用户机器上设置一个环境变量到目标目录;例如(命令行)SET CSVPATH=C:\My\CSV
  • 让 CSV 处理 XLSM 中的宏使用 Environ() 函数读取此环境变量;例如(VBA)MyPath = Environ("CSVPATH") & "\"

或者,您可以

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