宏/菜单/工具栏/功能区
跳过Autoexec宏(自动执行宏)
2004-11-23 21:58:25

Private Declare Function SetKeyboardState _    Lib "user32" _    (lppbKeyState As Any) _    As Long    Private Declare Function GetKeyboardState _    Lib "user32" (pbKeyState As Any) _    As Long

Private Declare Function GetWindowThreadProcessId _    Lib "user32" _    (ByVal hWnd As Long, _    lpdwProcessId As Long) _    As Long

Private Declare Function AttachThreadInput _    Lib "user32" _    (ByVal idAttach As Long, _    ByVal idAttachTo As Long, _    ByVal fAttach As Long) _    As Long

Private Declare Function SetForegroundWindow _    Lib "user32" _    (ByVal hWnd As Long) _    As Long

Private Declare Function SetFocusAPI _    Lib "user32" Alias "SetFocus" _    (ByVal hWnd As Long) _    As Long

Private Const VK_SHIFT = &H10Private Const VK_LSHIFT = &HA0Private Const VK_RSHIFT = &HA1

Function fGetRefNoAutoexec( _                        ByVal strMDBPath As String) _                        As access.ApplicationOn Error GoTo ErrHandlerDim objAcc As access.ApplicationDim TIdSrc As Long, TIdDest As LongDim abytCodesSrc(0 To 255) As ByteDim abytCodesDest(0 To 255) As Byte

    If (Len(Dir$(strMDBPath, vbNormal)) = 0) Then        Err.Raise 53    End If

    Set objAcc = New access.Application    With objAcc        .Visible = True

        ' attach to process        TIdSrc = GetWindowThreadProcessId( _                            Application.hWndaccessApp, ByVal 0)        TIdDest = GetWindowThreadProcessId( _                            .hWndaccessApp, ByVal 0)                        If CBool(AttachThreadInput(TIdSrc, TIdDest, True)) Then            Call SetForegroundWindow(.hWndaccessApp)            Call SetFocusAPI(.hWndaccessApp)                        ' 设置Shift状态            Call GetKeyboardState(abytCodesSrc(0))            Call GetKeyboardState(abytCodesDest(0))            abytCodesDest(VK_SHIFT) = 128            Call SetKeyboardState(abytCodesDest(0))                    ' 打开一个带有Autoexec宏的mdb            Call .OpenCurrentDatabase(strMDBPath, False)                        ' 恢复键盘状态            Call SetKeyboardState(abytCodesSrc(0))        End If        ' release        Call AttachThreadInput(TIdSrc, TIdDest, False)        Call SetForegroundWindow(Application.hWndaccessApp)        Call SetFocusAPI(Application.hWndaccessApp)            End With    Set fGetRefNoAutoexec = objAcc    Set objAcc = Nothing

    Exit FunctionErrHandler:    If (TIdDest) Then Call AttachThreadInput(TIdSrc, TIdDest, False)    Call SetForegroundWindow(Application.hWndaccessApp)    With Err        .Raise .Number, .Source, .Description, .HelpFile, .HelpContext    End WithEnd Function'********* Code End ***********

翻译朱亦文来 源 于:MVPS: The access Web

(宏_脚本-相关文章技巧链接):如何打开或编辑Autoexec宏啊!