我想运行 Excel,在其中打开特定文件并将参数传递给此文件。我的调用是
"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE"
"D:\Desktop\libs\xlam\+apps\+diagramViewer\diagramViewer.xlsm"
/e"D:\Desktop\MyFile.dia"
一切按我想要的方式运行。
但是,当 Excel 文件参数 (MyFile.dia) 包含空格时,无论是否使用引号,所有内容都会被破坏。错误消息是无法找到“File.dia”。
我该如何解决这个问题?MS 帮助没有帮助。
编辑:
为了回应戴夫的评论,我尝试:
"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE"
"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "D:\Desktop\libs\xlam\+apps\+diagramViewer\diagramViewer.xlsm"
"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "D:\Desktop\libs\xlam\+apps\+diagramViewer\diagramViewer.xlsm" "D:\Desktop\MyFile.dia"
"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "D:\Desktop\libs\xlam\+apps\+diagramViewer\diagramViewer.xlsm" "D:\Desktop\MyFile .dia"
一切正常。当我尝试包含开关/e
以将参数传递给 Excel 时,问题就开始了。即...
"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "D:\Desktop\libs\xlam\+apps\+diagramViewer\diagramViewer.xlsm" /e "D:\Desktop\MyFile.dia"
"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "D:\Desktop\libs\xlam\+apps\+diagramViewer\diagramViewer.xlsm" /e "D:\Desktop\MyFile. dia"
这些不会产生任何错误,问题是 Excel 无法理解最后一个文件是我想要传递给 xlsm 文件的内容,而不是要在 Excel 中打开的另一个文件。要告诉 Excel .dia 应该是 .xlsm 处理的参数,我发现唯一可行的方法是删除“/e”周围的空格。因此
"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "D:\Desktop\libs\xlam\+apps\+diagramViewer\diagramViewer.xlsm"/e"D:\Desktop\MyFile.dia"
但按预期工作
"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "D:\Desktop\libs\xlam\+apps\+diagramViewer\diagramViewer.xlsm"/e"D:\Desktop\MyFile .dia"
导致 Excel 尝试打开“.dia”文件,从而出现错误消息“.dia 文件不存在...”。
答案1
错误一定是您的路径实际上并没有引用您认为的内容,或者可能是语言环境的问题,或者是它如何识别字符......
我刚刚创建了以下内容
"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "C:\Users\DRook\Desktop\a d c.xlsx"/e "C:\Users\DRook\Desktop\My File . dia"
它通过命令提示符和 .bat 文件按预期工作(即没有错误消息)。
我怀疑该文件没有被正确引用,或者你的一些区域设置可能令人困惑!
为了确定(只是为了排除这种可能性),请在资源管理器中找到MyFile.dia
并重命名My File . dia
。然后,shift按住按钮,右键单击文件(file.dia),然后选择选项Copy as path
然后将其粘贴作为命令中的最后一个参数。
请记住,如果您不是自己创建此字符串,而是从其他来源复制并粘贴的,则“”标记可能不会按您认为的那样发挥作用。我建议您重写整个字符串,然后进行测试。或者复制上面的字符串并进行测试,只需重命名路径即可。
如果D:
不是本地驱动器,那么我建议使用桌面上的所有内容进行测试(或者至少是不会出现任何网络或权限问题的本地位置)。
我甚至尝试过类似的目录结构并且效果很好。
编辑
我还会逐个尝试每个参数以确保路径正确。因此,在命令提示符中输入
“C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE”并按enter
然后
“D:\Desktop\libs\xlam+apps+diagramViewer\diagramViewer.xlsm”并按enter
然后
“D:\Desktop\MyFile.dia”并按enter
然后
“D:\Desktop\My File . dia”并按enter
编辑2
是的,我现在可以更好地看到/理解错误,但只能提供一个解决方案,而这个解决方案是你不想要的 - 不允许有空白。
当我在参数中发送空格时发生了什么,我从 Excel 收到以下消息(注意,我的参数是e/"C:\Users\DRook\Desktop\My File . dia"
)
请注意,问题是 Excel 似乎正在将空格与扩展名交换(因此看到空格,假定它是文件名的结尾并创建扩展名)。
答案2
我一直在寻找类似的东西,但想在打开的 XLSM 文件中使用宏来自动运行 IF 传递的参数。
关于这个主题。
我所做的是使用帖子 #19 中的建议(有趣的是,VB(6)“命令”在 Office 应用程序中不起作用,这一点我已经验证过了)。我所做的是使用批处理文件启动 Excel:-
Set ExcelArgs=AutorunMacros
"C:\Program Files (x86)\Microsoft Office\Office14\excel.exe" /e "C:\Path to\Excel File\Analyser Program.xlsm"
然后在宏工作簿中,我有以下内容(单击项目中的“工作簿”选项卡
Private Sub Workbook_Open()
Dim ExcelArgs As String
ExcelArgs = Environ("ExcelArgs")
If Lcase (ExcelArgs)= "autorunmacros" Then
Call StartMyMacro(Auto:=True)
End If
End Sub
StartMyMacro 就是您想要自动实现的。
另外我的 StartMyMacro 定义如下
Public Sub StartMyMacro(Optional Auto As Boolean = False)
如果手动调用,则自动设置为 False,而从自动打开中调用它会将变量设置为 True。最后,使用 Auto=True,我保存工作簿(实际上是在宏期间创建的新工作簿),然后退出 Excel。这会导致 CMD 窗口关闭并清除环境变量。
答案3
我们也遇到过类似的问题。我们最终重命名了 xlsm 文件。文件名的编码存在问题。