我一直在努力解决这个问题,似乎无法在任何地方找到问题的解决方案。这是第一部分:VBA Shell command always returns "File Not Found"在那个问题中,它没有在%APPDATA%文件夹中找到应用程序,原因有些奇怪,可能是安全设置。
我已经将导入工具移动到我存储数据库的同一目录中,并希望能够使其正常工作。
我的目标是单击MS Access中的按钮,让它直接运行我的导入工具。现在,我打开了保存工具的文件夹。这适用于我的开发机器,它具有管理员权限,但在没有管理员权限的其他机器上不起作用。现在的代码如下所示:
Dim hProcess as Long
Dim myPath as String
Dim ex as String
ex = "C:\WINDOWS\explorer.exe "
myPath = Environ("ProgramFiles(x86)") & "\mytool\"
hProcess = Shell(ex & myPath, vbNormalFocus)
这允许打开保存文件的文件夹,但仅限于具有完全管理员权限的计算机帐户。在具有低于完全权限的计算机帐户上运行此操作时,它根本不执行任何操作。
我也尝试了以下内容:
Dim hProcess As Long
Dim myPath as String
myPath = Environ("ProgramFiles(x86)") & "\mytool\mytool.exe"
hProcess = Shell(myPath, vbNormalFocus)
当我查看进程管理器时,本节“似乎”可以加载应用程序“mytool.exe”。但是,几秒钟后(可能是20秒)会弹出一个对话框,指出应用程序“mytool.exe”已停止工作。
这里需要注意的一点是,我的开发机器上有管理员权限,但我在家用机器上拥有所有权限。在我的家用机器上,这第二个代码没有任何问题。在我的开发机器上,它崩溃,而在受限制的用户机器上,它根本不做任何事情。
有关如何在使用低于管理员权限的情况下从MS Access打开此应用程序的建议吗?要么直接运行应用程序,要么至少打开所述应用程序所在的文件夹。
谢谢!
P.S。我已经尝试了在stackoverflow上找到的ShellAndWait和RunApplication代码,这两个代码都不适用于此实例。
答案 0 :(得分:4)
当我需要在VBA中执行某些操作时,我总是使用Windows API中的ShellExecute
据我所知,它适用于没有完全权限的机器。
示例:
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _
ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal lpnShowCmd As Long) As Long
Public Sub ShellEx(ByVal Path As String, Optional ByVal Parameters As String, Optional ByVal HideWindow As Boolean)
If Dir(Path) > "" Then
ShellExecute 0, "open", Path, Parameters, "", IIf(HideWindow, 0, 1)
End If
End Sub
现在你可以调用ShellEx
来运行任何东西:
'run executable
ShellEx "c:\mytool.exe"
'open file with default app
ShellEx "c:\someimage.jpg"
'open explorer window
ShellEx "c:\"
请注意,ShellEx
也有两个可选参数
我没有在上面的例子中说明这一点,但你可以:
答案 1 :(得分:2)
点击此链接
MS ACCESS: LAUNCH AN APPLICATION FROM ACCESS 2003/XP/2000/97
这是一个在ms访问中运行应用程序的示例
Private Sub Command1_Click()
Dim myPath As String
myPath = "C:\Program Files\mytool\mytool.exe"
Call Shell(myPath , 1)
End Sub
我希望它可以帮助你
答案 2 :(得分:1)
只是搞乱了http://www.mombu.com/microsoft/scripting-wsh/t-vista-uac-problem-with-wscriptshell-run-method-1508617.html。我在Windows 7家用电脑上试过这个。
Set objShell = CreateObject("Shell.Application")
myPath = Environ("ProgramFiles(x86)") & "\mytool"
Set objFolder = objShell.Namespace(myPath)
Set objFolderItem = objFolder.ParseName("mytool.exe")
objFolderItem.InvokeVerb "runas"
它可能会给你一些想法。
答案 3 :(得分:0)
检查
Shell szFileName, vbNormalFocus
使用其他一些可执行文件。这可能是您工具的一些问题。