如何将值从批处理传递到 Excel VBA 宏

本文关键字:Excel VBA 批处理 | 更新日期: 2023-09-27 18:36:41

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

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

编辑 1:

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

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

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

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

    CSV 文件的位置在 NLOG 配置文件中指定,更改周围的实现以使用硬编码路径的成本很高。这是我唯一可行的想法,但它会很痛苦。

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

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

如何将值从批处理传递到 Excel VBA 宏

将 CSV 生成程序移植到用户计算机,您可以:

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

或者,您可以

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