【问题标题】:VB6 Shell Function - Invalid procedure call or argument shellVB6 Shell 函数 - 无效的过程调用或参数外壳
【发布时间】:2012-01-18 15:37:50
【问题描述】:

我正在尝试运行 shell 函数以使用 Notepad.exe 打开文件

我在尝试打开文件时收到“无效的过程调用或参数 shell”错误。

Sub OpenTextFile(textfile$)
  Dim txtapp$, arg$
  txtapp = "Notepad.exe"
  textfile = "C:\Users\ADMIN\Desktop\USA - FLNG\modelout\SUMMER.CFS"
  arg = Trim$(txtapp & " " & Chr$(34) & Trim$(textfile) & Chr$(34))
  ierr = Shell(arg, vbNormalFocus)
End Sub

有什么想法吗?

【问题讨论】:

  • 您的代码对我有用。你是如何声明你的变量的?
  • @JP。我发布了声明。谢谢
  • 如果声明notepad.exe的完整路径会怎样?这可以解释为什么它适用于 JP(因为记事本的路径在他的 %path% 环境变量中,而不是你的)
  • @SpectralGhost 实际上我认为它对我有用,因为我使用的测试路径不包含空格。
  • 有空格的文件应该不是问题,因为它用引号括起来 (Chr$(34))。

标签: shell vb6


【解决方案1】:

这对我有用:

Sub OpenTextFile(textfile As String)

Const txtapp As String = "Notepad.exe"
Dim arg As String
Dim ierr As Double

  arg = Trim$(txtapp & " " & Chr$(34) & Trim$(textfile) & Chr$(34))
  ierr = Shell#(arg, vbNormalFocus)

End Sub

Type-declaration characters 被认为是遗留代码,所以我通过声明来避免它们。 (但是我将它们与 Shell/Trim/Chr 一起使用以避免 Variant 返回类型。)

我相信您遇到的错误是因为您的文件路径包含空格。请改用WSHOM

Sub OpenTextFile(textfile As String)
Dim oShell As Object

  Set oShell = GetShell

  If Not oShell Is Nothing Then
    oShell.Run textfile
  End If
End Sub

Function GetShell() As Object
  On Error Resume Next  
  Set GetShell = CreateObject("WScript.Shell") 
End Function

【讨论】:

  • 正确使用双引号应该可以解决路径中的空格问题。
  • @Tomalak 我相信我正确使用了引号。我目前正在处理的程序中有一堆 shell 调用。我希望不必全部更改。
  • @gberg927 Tomalak 是对的,我相信如果路径中有空格,您需要将引号加倍。然而,WSH 方法应该消除这种需要。
【解决方案2】:

我认为在您的 exe 应用程序旁边有一个文件 Notepad.exe

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多