Запуск макроса во внешней базе данных
Автор Administrator   
14.10.2019 г.
Иногда возникает вопрос: "Как я могу запустить/выполнить макрос в другой внешней базе данных?" Вот тут находится ответ на данный вопрос.

 

Ну, как и с большинством вещей, связанных с MS Access, есть несколько возможных решений.

 

1.    Скопируйте их в текущую базу данных

В некоторых случаях решение так же просто, как копирование макроса в текущую базу данных и создание связанных таблиц с данными, требуемыми макросом. Таким образом, вы можете запустить макрос локально. Больше не нужно ничего выполнять удаленно.

 

2.    Используйте переключатель командной строки /x

Другое решение заключается в использовании команды Shell в сочетании с параметром командной строки /x для запуска указанного макроса. Проблема этого подхода заключается в том, что после завершения выполнения макроса внешняя база данных будет работать. Желательно это или нет, зависит от каждой ситуации. Ниже приведен пример функции для запуска макроса:

 

'---------------------------------------------------------------------------------------

' Procedure : ShellExecExternalMacro

' Author    : Daniel Pineault, CARDA Consultants Inc.

' Website   : http://www.cardaconsultants.com

' Purpose   : Run a Macro in an external database

' Copyright : The following may be altered and reused as you wish so long as the

'             copyright notice is left unchanged (including Author, Website and

'             Copyright).  It may not be sold/resold or reposted on other sites (links

'             back to this site are allowed).

'

' Input Variables:

' ~~~~~~~~~~~~~~~~

' sDb       : Fully quaified path and file name with extension of the external database

'             that you want to run a macro from

' sMacroName: Name of the Macro to run

'

' Usage:

' ~~~~~~

' Call ShellExecExternalMacro(Application.Currentproject.Path & "\Database2.accdb", "Macro1")

'

' Revision History:

' Rev       Date(yyyy/mm/dd)        Description

'---------------------------------------------------------------------------------------

' 1         2014-Sep-16                 Initial Release

'---------------------------------------------------------------------------------------

Function ShellExecExternalMacro(sDb As String, sMacroName As String)

On Error GoTo Error_Handler

 

    Call Shell("msaccess.exe " & sDb & " /x " & sMacroName, 1)

 

Error_Handler_Exit:

    On Error Resume Next

    Exit Function

 

Error_Handler:

    MsgBox "The following error has occurred." & vbCrLf & vbCrLf & _

            "Error Number: " & Err.Number & vbCrLf & _

            "Error Source: ShellExecExternalMacro" & vbCrLf & _

            "Error Description: " & Err.Description, _

            vbCritical, "An Error has Occurred!"

    Resume Error_Handler_Exit

End Function

 

3.    Используйте пользовательскую функцию VBA

На мой взгляд, лучшим решением является простая пользовательская функция, в которой вы можете указать, следует ли закрывать экземпляр внешней базы данных. Ниже приведен пример функции для этого:

 

'---------------------------------------------------------------------------------------

' Procedure : ExecExternalMacro

' Author    : Daniel Pineault, CARDA Consultants Inc.

' Website   : http://www.cardaconsultants.com

' Purpose   : Run a Macro in an external database

' Copyright : The following may be altered and reused as you wish so long as the

'             copyright notice is left unchanged (including Author, Website and

'             Copyright).  It may not be sold/resold or reposted on other sites (links

'             back to this site are allowed).

'

' Input Variables:

' ~~~~~~~~~~~~~~~~

' sDb       : Fully quaified path and file name with extension of the external database

'             that you want to run a macro from

' sMacroName: Name of the Macro to run

' bCloseExtDb:Whether or not Access should close the instance of the external database

'

' Usage:

' ~~~~~~

' Call OpenExternalMacro(Application.Currentproject.Path & "\Database2.accdb", "Macro1", True)

'

' Revision History:

' Rev       Date(yyyy/mm/dd)        Description

' --------------------------------------------------------------------------------------

' 1         2014-Sep-16                 Initial Release

'---------------------------------------------------------------------------------------

Function ExecExternalMacro(sDb As String, sMacroName As String, bCloseExtDb As Boolean)

On Error GoTo Error_Handler

    Dim oAccess       As Access.Application

 

    Set oAccess = CreateObject("Access.Application")

 

    oAccess.OpenCurrentDatabase sDb

    oAccess.DoCmd.RunMacro sMacroName

 

Error_Handler_Exit:

    On Error Resume Next

    If bCloseExtDb = True Then oAccess.CloseCurrentDatabase

    Set appAccess = Nothing

    Exit Function

 

Error_Handler:

    MsgBox "The following error has occurred." & vbCrLf & vbCrLf & _

            "Error Number: " & Err.Number & vbCrLf & _

            "Error Source: ExecExternalMacro" & vbCrLf & _

            "Error Description: " & Err.Description, _

            vbCritical, "An Error has Occurred!"

    Resume Error_Handler_Exit

End Function

 

Итак, как вы можете видеть, есть несколько возможных подходов к запуску макроса во внешней базе данных.

 

Источник: MS Access – Run a Macro in an External Database


 


Просмотров: 96

  Ваш коментарий будет первым

Добавить коментарий
Имя:
E-mail
Коментарий:



Код:* Code