【问题标题】:Excel VBA Shell "file not found"Excel VBA Shell“找不到文件”
【发布时间】:2015-04-13 18:19:59
【问题描述】:

在我的一生中,我无法让这个 shell 过程处理变量。我正在尝试执行 POSTRESULTS6,然后处理 csv 文件。 “DISPLAY”参数告诉 POSTRESULTS6 在处理 csv 时显示一个进度窗口。

Dim MyAppID As Variant
Dim stExecute As String: stExecute = """C:\Program Files (x86)\PerkinElmer\LABWORKS64\POSTRESULTS6.exe"""
Dim stFile As String: stFile = "INFILE:C:\PostResult6\Multi-Component_Data_Import.csv"
Dim stFull As String: stFull = "stExecute & "" "" & stFile"
MyAppID = Shell("stFull" & "" "" & DISPLAY, vbNormalFocus)
AppActivate (MyAppID)

当我像这样在一行中全部输入时,该过程按预期工作:

MyAppID = Shell("""C:\Program Files (x86)\PerkinElmer\LABWORKS64\POSTRESULTS6.exe"" & "" "" & INFILE:C:\PostResult6\Multi-Component_Data_Import.csv" & "" "" & DISPLAY, vbNormalFocus)

我想使用变量的原因是为了缩短代码行数,并可能使 csv 文件名的过程动态化。

我猜它与空格有关,但我不知道我的错误在哪里。我也不知道如何将一长串代码继续到下一行。空格下划线似乎不起作用。

顺便说一句,当我的 shell 过程非常简单时,我不必声明 MyAppID 变量。随着它变得越来越复杂,我开始收到有关未定义 MyAppID 的错误。有谁知道这是为什么?

非常感谢任何帮助。

编辑:当我使用变量运行代码时出现的错误是“运行时错误'53':找不到文件”

我知道分配给变量的文件路径是正确的。我在 Windows 资源管理器中对其进行了测试。

【问题讨论】:

  • 您的报价有问题。

标签: vba shell excel


【解决方案1】:

你的问题是,例如:stFull = "stExecute & "" "" & stFile"

stExecute 在引号内,这使它成为文字而不是变量。

我认为这是正确的:

  Dim MyAppID As Variant
  Dim stExecute As String: stExecute = """C:\Program Files (x86)\PerkinElmer\LABWORKS64\POSTRESULTS6.exe"""
  Dim stFile As String: stFile = "INFILE:C:\PostResult6\Multi-Component_Data_Import.csv"
  Dim stFull As String: stFull = stExecute & " " & stFile
  MyAppID = Shell(stFull & " DISPLAY", vbNormalFocus)

【讨论】:

  • 用最少的引文就成功了。非常感谢。您是否碰巧知道如何将长字符串(例如我的第二个示例)继续到下一行?空格下划线不起作用。
  • @BWest 您必须结束一个文字,开始另一个文字并使用 & 连接它们。例如:stExecute = """C:\Program Files (x86)\" & _换行"PerkinElmer\LABWORKS64\POSTRESULTS6.exe"""。文字中不能有多余的空格。
【解决方案2】:

你有搞砸的报价。最后一行中的stFull 被评估为 literal 而不是字符串。这是我解决您的报价问题的尝试。

    Dim stExecute As String: stExecute = "C:\Program Files (x86)\PerkinElmer\LABWORKS64\POSTRESULTS6.exe"
Dim stFile As String: stFile = "INFILE:C:\PostResult6\Multi-Component_Data_Import.csv"
Dim StFull As String
StFull = """" & """" & """" & stExecute & """" & """" & " & """" """" & " & stFile & """"
MyAppID = Shell(stFull & "" "" & DISPLAY, vbNormalFocus)
AppActivate (MyAppID)

输出 StFull:

【讨论】:

    【解决方案3】:

    我对在 Shell 中使用变量的看法:

    MyAppID as variant
    Dim Program as string
    Dim File as string
    
    Program = """Your path to program"""
    File = """Your path to file"""
    
    MyAppID = Shell(Program & " " & File, vbNormalFocus)
    

    其他 cmets:

    • 可以使用单引号(例如 Program = "Your path to program"),但如果文件夹名称中有空格并返回错误,则 VBA 可能无法正确编译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多