Sei sulla pagina 1di 3

Ejecutar consulta SQL desde Excel

BY SERGIO ALEJANDRO CAMPOS 8 NOVEMBER, 2011

Hace algunos das me surgi la necesidad de extraer datos de


unas bases de SQL a Excel, a lo cual me di a la tarea de buscar
informacin al respecto. Cul fue mi sorpresa que no existe
mucha informacin al respecto. Encontr un ejemplo de ejecutar
consulta SQL desde Excel del cual tom el cdigo que realiza la
funcin y adecu un formulario para que sea ms amigable la
consulta.
Cmo funciona?
El ejemplo funciona si se tiene una cadena de conexin a SQL, y
aunque no est probado para MySql no dudo que tambin
funcione, slo modificando la cadena.
Se muestra un formulario donde se especifica el nombre del
servidor, de la base de datos, as como el usuario y la
contrasea, adems de un espacio para se que introduzca la
sentencia SQL a ejecutar.

Consideraciones
Se requieren conocimientos bsicos de SQL para armar la
consulta, as como un servidor SQL local o en red.

Cdigo
Private Sub CommandButton1_Click()
'Llamas la funcin Ejecutar
Cells.ClearContents
Call Ejecutar(Sheets(2).Range("consulta"), "Hoja1")
End Sub
Function Ejecutar(Sql As String, Hoja As String)
On Error GoTo ErrorHandler
Dim cn As Object
' crea un objeto Connection
Set cn = CreateObject("ADODB.Connection")
' IMPORTANTE: Indicar la cadena de conexin a usar
servidor = Sheets(2).Range("servidor")
base = Sheets(2).Range("base")
Usuario = Sheets(2).Range("usuario")
pass = Sheets(2).Range("pass")
Conexion = "Provider=SQLOLEDB.1;" & _
"Password=" & pass & ";" & _
"Persist Security Info=True;" & _
"User ID=" & Usuario & ";" & _
"Initial Catalog=" & base & ";" & _
"Data Source=" & servidor
'cn.ConnectionString = "Provider=SQLOLEDB.1;Password=s3cr3t0;Persist Security Info=True;User
ID=sa;Initial Catalog=Cobranza;Data Source= 192.168.2.6"
cn.ConnectionString = Conexion
' verifica que los parmetros no estn vacios
If Sql <> vbNullString And Hoja <> vbNullString Then
' variable para al rec de ado
Dim rst As Object
' abre la conexin a la base de datos
cn.Open
' crea un nuevo objeto recordset
Set rst = CreateObject("ADODB.Recordset")
' Ejecuta el sql para llenar el recordset
rst.Open Sql, cn, 1, 3
' variables para los indices de las filas y columnas
c = 0
f = 0
' recorre las columnas, aade el nombre del campo al encabezado
For i = 0 To rst.Fields.Count - 1
Sheets(1).Range(Chr(i + 65) & f + 1).Value = rst.Fields(i).Name
Next
f = f + 1

' recorre todo el recordset hasta el final


Do While Not rst.EOF
' recorre los campos en el registro actual del recordset para recuperar el dato
For i = 0 To rst.Fields.Count - 1
' aade el valor a la celda
Sheets(1).Range(Chr(c + 65) & _
f + 1).Value = rst.Fields(c)
c = c + 1
Next
' resetea el indice de las columnas
c = 0
' Referencia al registro actual (incrementa )
f = f + 1
' Siguiente registro
rst.MoveNext
Loop
' cierra y descarga las referencias
On Error Resume Next
rst.Close
cn.Close
Set cn = Nothing
Set rst = Nothing
End If
Call Macro1
Exit Function
ErrorHandler:
MsgBox "Ha ocurrido un error: " & Err.Description, vbExclamation, "EXCELeINFO"
End Function

Potrebbero piacerti anche