Ejecute un procedimiento VBA en una base de datos externa de Microsoft Access
En una publicación reciente me preguntaron sobre la ejecución de macros y código en bases de datos externas.
Rápidamente señalé mi artículo:
pero luego me di cuenta de que nunca había publicado mi código para ejecutar procedimientos VBA en otra base de datos de Access.
¡Así que corrijamos ese descuido!
Ejecución de funciones y subtítulos de VBA en otra base de datos de Microsoft Access
El proceso de ejecutar un código Macro o VBA en una base de datos externa es bastante similar, siendo la principal diferencia la línea de ejecución real.
Aquí hay una función que demuestra cómo abrir otra base de datos y ejecutar una Sub o Función, incluso devolviendo el valor en el caso de una Función:
'--------------------------------------------------------------------------------------- ' Procedure : ExecuteExternalProcedure ' Author : Daniel Pineault, CARDA Consultants Inc. ' Website : ' Purpose : Run a VBA Procedure (Sub, Function) in an external database ' Be VERY careful with routines that might trigger dialogs, msgbox, inputbox,...! ' Copyright : The following is release as Attribution-ShareAlike 4.0 International ' (CC BY-SA 4.0) - ' Req'd Refs: Late Binding -> none required ' ' Input Variables: ' ~~~~~~~~~~~~~~~~ ' sDb : Fully qualified path and file name with extension of the external database ' that you want to run a Procedure from ' sProcedureName: Name of the Procedure to run ' sDbPassword : Password required to open the database (if applicable) ' If a password is required and not supplied, the customary Access popup ' will appear. ' ' Usage: ' ~~~~~~ ' ExecuteExternalProcedure("C:\Users\Dev\Desktop\Test.accdb", "Testing01") ' Returns -> 4 ' ' ExecuteExternalProcedure("C:\Users\Dev\Desktop\Test2.accdb", "Testing02", "Hi") ' Returns -> 4 ' ' Revision History: ' Rev Date(yyyy-mm-dd) Description ' ************************************************************************************** ' 1 2014-09-16 Initial Release ' 2 2025-01-23 Updated Copyright, Refs, Error_Handler for ' blog release '--------------------------------------------------------------------------------------- Public Function ExecuteExternalProcedure(sDb As String, _ sProcedureName As String, _ Optional sDbPassword As String) As Variant Dim oAccess As Object 'New Access.Application On Error GoTo Error_Handler Set oAccess = CreateObject("Access.Application") If sDbPassword = "" Then oAccess.OpenCurrentDatabase sDb Else oAccess.OpenCurrentDatabase sDb, , sDbPassword End If ExecuteExternalProcedure = oAccess.Run(sProcedureName) Error_Handler_Exit: On Error Resume Next oAccess.CloseCurrentDatabase oAccess.Quit Set oAccess = Nothing Exit Function Error_Handler: MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _ "Error Source: ExecuteExternalProcedure" & vbCrLf & _ "Error Number: " & Err.Number & vbCrLf & _ "Error Description: " & Err.Description & _ Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _ , vbOKOnly + vbCritical, "An Error has Occurred!" Resume Error_Handler_Exit End Function
¡Asegúrese de que el procedimiento al que llame tenga un manejo de errores adecuado!
Además, si los procedimientos involucran cuadros de diálogo, cuadro de mensajes, cuadro de entrada, etc., se iniciarán, pero a menudo no se pondrán en primer plano, así que mire su barra de tareas para encontrar dónde están.