我正在使用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
答案 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