Access

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.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba