访问:Shell cmd打开MDB

Ric*_*ick 3 ms-access vba ms-access-2003

我一直在使用以下命令通过VBA打开另一个MDB Access文件:

Shell "cmd /c " & Chr(34) & strNewFullPath & Chr(34), vbHide
Run Code Online (Sandbox Code Playgroud)

strNewFullPath是MDB文件的完整路径.使用Access 2010时工作正常,但不能在Access 2003上运行.如果我在XP DOS终端中运行该命令,它将运行.

我可以用其他什么命令,应该在Access 2003中了工作,并与Access运行?

Jim*_*ena 5

尝试使用Windows Scripting Host Object Model(WSHOM):

Sub RunFile(filename As String)
Dim oShell As Object
  Set oShell = GetShell
  If Not oShell Is Nothing Then
    oShell.Run filename
  End If
End Sub
Function GetShell() As Object   
  On Error Resume Next     
  Set GetShell = CreateObject("WScript.Shell")  
End Function 
Run Code Online (Sandbox Code Playgroud)

Windows文件关联应允许在其本机应用程序中打开这两种类型的文件.

样品用法:

RunFile strNewFullPath
Run Code Online (Sandbox Code Playgroud)

可选参数:

Run方法有两个可选参数.请注意,大部分内容都是从MSDN复制的:

  1. intWindowStyle(integer)0到10之间的数字:

    0 - 隐藏窗口并激活另一个窗口.
    1 - 激活并显示一个窗口.如果窗口最小化或最大化,系统会将其恢复到原始大小和位置.应用程序应在首次显示窗口时指定此标志.
    2 - 激活窗口并将其显示为最小化窗口.
    3 - 激活窗口并将其显示为最大化窗口.
    4 - 以最近的大小和位置显示窗口.活动窗口保持活动状态.
    5 - 激活窗口并以当前大小和位置显示.
    6 - 最小化指定的窗口并激活Z顺序中的下一个顶级窗口.
    7 - 将窗口显示为最小化窗口.活动窗口保持活动状态.
    8 - 以当前状态显示窗口.活动窗口保持活动状态.
    9 - 激活并显示窗口.如果窗口最小化或最大化,系统会将其恢复到原始大小和位置.应用程序应在还原最小化窗口时指定此标志.
    10 - 根据启动应用程序的程序状态设置show-state.

    我不知道此参数的默认值.请注意,有些程序会忽略您设置的任何值(我无法告诉您哪些值).

  2. bWaitOnReturn(布尔值)

    异步代码设置为False.Run方法在完成之前将控制权返回给调用程序.默认值为False.


Han*_*sUp 5

如果要使用Access VBA在另一个Access应用程序实例中打开数据库,则可以执行以下操作:

Dim objApp As Access.Application
Set objApp = New Access.Application
objApp.UserControl = True
objApp.OpenCurrentDatabase "C:\Access\sample.mdb"
Set objApp = Nothing
Run Code Online (Sandbox Code Playgroud)

将UserControl设置为True可使新应用程序实例在过程完成后打开。

如果要隐藏新的Access实例,请包括:

objApp.Visible = False
Run Code Online (Sandbox Code Playgroud)

我建议采用这种方法,因为它还为您提供了一种通过objApp对象变量自动执行新应用程序实例的方法。但是,如果您对自动执行新实例不感兴趣,则该方法仅在您无法使其他任何方法起作用时才有用。