12

我一直在努力解决这个问题,但似乎我无法在任何地方找到解决问题的方法。这是第一部分: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)

这允许打开保存文件的文件夹,但仅限于具有完全管理员权限的计算机帐户。在没有完全权限的计算机帐户上运行它时,它根本什么都不做。

我还尝试了以下方法:

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 打开此应用程序有什么建议吗?直接运行应用程序或至少打开所述应用程序所在的文件夹。

谢谢!

PS 我已经尝试过在 stackoverflow 上找到的 ShellAndWait 和 RunApplication 代码,但在这种情况下都不起作用。

4

4 回答 4

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

现在你可以调用ShellEx运行几乎任何东西:

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

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

'open explorer window
ShellEx "c:\"

请注意,它ShellEx也有两个可选参数。
我没有在上面的例子中展示这一点,但你可以:

  • 将参数传递给可执行文件
  • 隐藏被调用可执行文件的窗口
于 2013-12-07T12:16:58.133 回答
2

按照这个链接

MS ACCESS:从 ACCESS 2003/XP/2000/97 启动应用程序

这是在 ms access 中运行应用程序的示例

Private Sub Command1_Click()
Dim myPath As String
myPath = "C:\Program Files\mytool\mytool.exe"
Call Shell(myPath , 1)
End Sub

我希望它对你有帮助

于 2014-11-19T21:49:20.240 回答
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"

它可能会给你一些想法。

于 2012-05-17T18:59:50.010 回答
0

查看

Shell szFileName, vbNormalFocus

与其他一些可执行文件。你的工具可能有问题。

于 2012-05-21T07:38:20.640 回答