VBA Shell命令始终返回“找不到文件”

时间:2012-05-03 20:42:31

标签: access-vba

我正在使用VBA进行MS Access,以便将一个小型C#应用程序链接到我的数据库作为帮助工具。我已尝试过stackoverflow本身的几个不同的想法,包括ShellAndWait实用程序和该页面上的另一个。

我在表单上有一个按钮。当您单击此按钮时,它应该运行我当前存储在%APPDATA%/program/

中的另一个应用程序

这是当前有效的代码:

Private Sub BtnImport_Click()

Dim file As String
Dim hProcess as Long

file = Environ("APPDATA") & "\program\component_import.exe"
'This is the standard version, which apparently does nothing at this time.
hProcess = Shell(file, vbNormalFocus)

'This is the RunApplication version I got from here earlier. It ends
'with "Successfully returned -532462766
import_funcs.RunApplication(file)

'This is the ShellAndWait version, which gives me a "File not Found" error
import_funcs.ShellAndWait(file, 0, vbNormalFocus, AbandonWait)

End Sub

我已经为ShellAndWait模块和另一个类似模块更改了原始shell。在我的应用程序无法启动方面,这两个选项都没有任何不同。

我仔细检查过“文件”是否正确(它指向C:\Users\Me\AppData\Roaming\program\component_import.exe)。我已经仔细检查以确保我的应用程序位于正确的位置。

如果我从文件资源管理器双击,它运行正常。每当我尝试从MS Access运行它时,它会显示Run-time error '53': File not found.

有什么建议吗?

编辑:另外,路径本身不包含任何空格。

编辑:添加了一些额外的代码。 链接到第一个pastebin:RunApplication pastebin 链接到第二个pastebin:ShellAndWait pastebin

1 个答案:

答案 0 :(得分:0)

我发现有时候使用shell命令时,带空格的文件夹名称会引发错误。

例如:C:\ My Folder \ appl.exe

制作: C:\ MyFolder文件\ appl.exe

还可以检查有效路径: 以下代码通过将url作为参数传递来检查chrome.exe所在的文件夹并从那里调用www.google.com:

Public Sub Display_Google()
  Dim chromePath As String
  chromePath = "C:\Program Files\Google\Chrome\Application\chrome.exe"

  If FileExists(chromePath) Then
  Shell (chromePath & " -url" & " " & "www.google.com"), vbMaximizedFocus
  Else

  chromePath = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
  Shell (chromePath & " -url" & " " & "www.google.com"), vbMaximizedFocus
  End If
End Sub
  

Public Function FileExists(ByVal FileName As String) As Boolean
    On Error Resume Next
    FileExists = Not CBool(GetAttr(FileName) And (vbDirectory Or vbVolume))
    On Error GoTo 0
End Function