如何将值从批处理传递到 Excel VBA 宏
本文关键字:Excel VBA 批处理 | 更新日期: 2023-09-27 18:36:41
我有一个C#程序,它生成一个CSV文件,然后在Excel中打开一个XLSM文件(使用ProcessStartInfo
和Process.Start
)。XLSM 中的宏加载 CSV 文件并将数据从该文件分发到特定单元格。最终,这将是 C# 生成一个没有宏的电子表格,可以在任何办公套件中加载,CSV 将消失。
我的问题是这个系统现在需要支持从磁盘上的任何位置运行 XLSM。它通过硬编码的相对路径查找 CSV,该路径在用户指定的位置不起作用。我想做一些类似于传递编译器参数来定义常量的事情。
编辑 1:
我考虑并拒绝的替代方法:
-
将 XLSM 复制到 CSV 附近的标准位置,然后从该位置运行它。
我需要将文件复制回其原始位置,但我不知道何时关闭 Excel 才能执行此操作......除了可能在Excel中,但它不知道原始位置,因此这个问题。
-
在用户指定的 XLSM 位置旁边创建 CSV 文件。
CSV 文件的位置在 NLOG 配置文件中指定,更改周围的实现以使用硬编码路径的成本很高。这是我唯一可行的想法,但它会很痛苦。
-
从标准位置创建指向自定义位置的基于 Windows 的硬链接。
我不能假设我正在 NTFS 文件系统上运行。
将 CSV 生成程序移植到用户计算机,您可以:
- 将用户计算机上的环境变量设置为目标目录;例如(cmd 行)
SET CSVPATH=C:'My'CSV
- 让 CSV 处理 XLSM 中的宏使用
Environ()
函数读取此环境变量;例如 (VBA)MyPath = Environ("CSVPATH") & "'"
或者,您可以
- 使用"安装 XLSM"中的目录选择对话框,使用
SaveSetting
语句将正确的文件路径写入目标计算机的注册表 - 让 CSV 处理 XLSM 中的宏使用
GetSetting()
函数读取注册表以获取正确的路径