-1

我正在为 MS Access 使用 VBA,以便将小型 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 模块和另一个类似模块更改了原始外壳。就我的应用程序未启动而言,这些选项都没有任何不同。

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

如果我从文件资源管理器中双击它运行良好。它说Run-time error '53': File not found.每当我尝试从 MS Access 运行它时。

有什么建议么?

编辑:顺便说一句,路径本身不包含任何空格。

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

4

1 回答 1

0

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

例如:C:\我的文件夹\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
于 2014-02-21T02:43:39.123 回答