VBA:如何从MS Access运行另一个应用程序

Jim*_*m P 12 shell ms-access vba

我一直试图弄清楚这个问题,似乎我无法在任何地方找到问题的解决方案.这是第一部分:VBA Shell命令总是返回"找不到文件"在该问题中,它没有在%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)
Run Code Online (Sandbox Code Playgroud)

这允许打开保存文件的文件夹,但仅限于具有完全管理员权限的计算机帐户.在具有少于完全权限的计算机帐户上运行此操作时,它根本不执行任何操作.

我也尝试过以下方法:

Dim hProcess As Long
Dim myPath as String

myPath = Environ("ProgramFiles(x86)") & "\mytool\mytool.exe"
hProcess = Shell(myPath, vbNormalFocus)
Run Code Online (Sandbox Code Playgroud)

本节"看起来"起作用,因为它在我查看进程管理器时加载了应用程序"mytool.exe".但是,几秒钟后(可能是20秒),会弹出一个对话框,指出应用程序"mytool.exe"已停止工作.

这里要注意的一件事是我在我的开发机器上拥有管理员权限,但我在家用机器上拥有所有权限.在我的家用机器上,这第二个代码没有任何问题.在我的开发机器上,它崩溃,而在受限制的用户机器上,它根本不做任何事情.

有关如何在使用低于管理员权限的情况下从MS Access打开此应用程序的建议吗?要么直接运行应用程序,要么至少打开所述应用程序所在的文件夹.

谢谢!

PS我已经尝试了在stackoverflow上找到的ShellAndWait和RunApplication代码,这两个代码都不适用于此实例.

Chr*_*cht 5

ShellExecute当我需要在VBA中执行某些操作时,我总是使用Windows API。
据我所知,它也可以在没有完全特权的机器上运行。

例:

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
Run Code Online (Sandbox Code Playgroud)

现在,您可以调用ShellEx以运行几乎所有内容:

'run executable
ShellEx "c:\mytool.exe"

'open file with default app
ShellEx "c:\someimage.jpg"

'open explorer window
ShellEx "c:\"
Run Code Online (Sandbox Code Playgroud)

注意,ShellEx还有两个可选参数。
我没有在上面的示例中显示此内容,但是您可以:

  • 将参数传递给可执行文件
  • 隐藏被调用可执行文件的窗口


Fio*_*ala 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"
Run Code Online (Sandbox Code Playgroud)

它可能会给你一些想法。