Skip to main content

Ejecutar un Script de SQL Server desde VBA de Excel


Este tema es común encontrarlo en los foros, pero no todos explican los detalles necesarios para poder llevar a cabo este propósito.

Primero es necesario aclarar que el lenguaje para escribir macros en la siute ofimática de microsoft es VBA, es decir Visual Basic, por lo que si ya dominas este lenguaje resultará más fácil entender el código.

Primero será necesario activar la cinta de opciones de Desarrollador o Programador: Archivo / Opciones / Personalizar cinta de opciones

Posteriormente insertamos un botón el cual ejecutará nuestro código que se conectará a la base de datos para obtener registros de la base de datos.

Al activar esta opción podremos dibujar un botón el una celda de Excel, a continuación se muestra la siguiente ventana, en ella asignamos un nombre a la macro:

Al presionar el botón Nuevo se abrirá otra ventana con el procedimiento cmdEjecutarScript(), el cual contendrá todo el código que permitirá ejecutar nuestro script.

El siguiente código deberá ser copiado en el cuerpo del método o procedimiento antes mencionado:

Sub cmdEjecutarScript()
    Dim CMDStoredProc As ADODB.Command
    Dim CnnConexion As ADODB.Connection
    Dim RcsDatos As ADODB.Recordset
    
    Dim CadConexion As String 'Cadena de conexión
    Dim Row As Integer
    Dim RecordsAffected As Long
    
    'Cadena de conexión
    Dim Servidor As String
    Dim Usuario As String
    Dim Contrasena As String
    Dim BaseDatos As String
    
    Servidor = "Servidor-SVRMSQL"
    Usuario = "sa"
    Contrasena = "654546521sasQwert"
    BaseDatos = "Empleados"
    
    CadConexion = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=" & Usuario & ";Pwd=" & Contrasena & ";Initial Catalog=" & BaseDatos & ";Data Source=" & Servidor & ""
   
    Set CnnConexion = New ADODB.Connection
    Set RcsDatos = New ADODB.Recordset
    Set CMDStoredProc = New ADODB.Command
    
    'Establecemos comunicación con nuestro servidor SQL Server
    Call CnnConexion.Open(CadConexion)
    
    'Enlazamos nuestros objetos y definimos el procedimiento almacenado a ejecutar
    CMDStoredProc.CommandType = adCmdText
    Set CMDStoredProc.ActiveConnection = CnnConexion
    CMDStoredProc.CommandText = "SELECT * FROM Empleados"
    
    'Creamos el parámetro del procedimiento almacenado
    Call CMDStoredProc.Parameters.Append(CMDStoredProc.CreateParameter("PV_OPCION", DataTypeEnum.adChar, ParameterDirectionEnum.adParamInput, 10))
    
    'Ejecutamos de Script
    Set RcsDatos = CMDStoredProc.Execute(RecordsAffected, , ExecuteOptionEnum.adAsyncFetch)
    
    'Recorremos el Recordset resultante para asignarlo a la celda en Excel
    Row = 1
    Do While Not RcsDatos.EOF
        Cells(Row, 2).Value = RcsDatos.Fields(0).Value
        Row = Row + 1
        RcsDatos.MoveNext
    Loop
End Sub

En el último fragmento de código se muestra un ciclo en donde se recorren los resultado del script y se copian los datos en la celda de excel.

OJO: Este archivo debe ser guardado como Plantilla de Excel habilitada para macros, ya que de no hacerlo perderán todo el código de la macro.

Link de descarga del archivo de Excel: https://goo.gl/5p74e4

Espero les sea de mucha utilidad.

3 comentarios en “Ejecutar un Script de SQL Server desde VBA de Excel”

Deja un comentario

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