Иногда возникает вопрос: "Как я могу запустить/выполнить макрос в другой внешней базе данных?" Вот тут находится ответ на данный вопрос.
Ну, как и с большинством вещей, связанных с 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
Просмотров: 1184
Ваш коментарий будет первым | | |