Saltar al contenido
PROGRAMAR EN VBA MACROS DE EXCEL

Conectar Excel con Excel Consulta SQL Varios Criterio con Datos Otro Libro


.

La macro permite importar datos de otro libro de Excel filtrando en base a crierios con SQL, no se abre el libro sino que se crea una conexión para extraer los datos filtrando por la condiciones o criterios dados, los datos son pegados en el libro que contiene la macro.

Click en el link siguiente para todos los vídeos de la saga Conectar Excel con Excel Sentencias SQL entre otro existe uno que permite filtrar por un rango de fechas o otro por un rango de números y mucho más.

Desde el final del post se puede descargar el ejemplo en forma gratuita sin ninguna restricción, el código se puede adaptar a cada necesidad, Aporta por favor para sostener el sitio si está dentro de tus posibilidades, desde ya muchas gracias.

Si te estás iniciando en la operación de Excel o requieres afirmar conocimientos, recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  
El vídeo verás la macro en acción con una explicación más detallada de su codificación y funcionamiento, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo Recorre fila buscando y comparando datos de dos columnas en hojas distintasbuscar en listbox mientras escribes en textbox, como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mail, trabajando con filas, celdas, columnas, rangos y muchos ejemplos más.


if (payload.eventType == ‘subscribe’) {
// Add code to handle subscribe event.
} else if (payload.eventType == ‘unsubscribe’) {
// Add code to handle unsubscribe event.
}
if (window.console) { // for debugging only
window.console.log(‘YT event: ‘, payload);
}
}

 

Para este ejemplo se necesita descargar un archivo comprimido, que puedes hacerlo desde el final del post, se debe descomprimir y guardar en cualquier directorio de nuestra PC con la única condición que deben guardarse juntos, porque el libro que contiene la macro necesita el otro libro para poder buscar los datos y llevar a cabo el ejemplo.

El libro con la macro buscará en el libro de Excel que se proporciona, todos los datos que coincidan con los criterios o condiciones expuestas en las celdas I1, K1 y L1, la macro no abre el libro sino que se conecta al libro para filtrar y extraer la formación necesaria, luego esta información es pegada o presentada en la hoja2 del Libro de Excel que contiene la macro y sobre el cual estamos trabajando.

Como se dijo para conectarse al libro se usa el siguiente código:

mybook = ThisWorkbook.Path & «414 Conectar Excel con Excel Consulta SQL Base Datos.xlsx»
cn.Open «Provider=Microsoft.ACE.OLEDB.12.0;» & «Data Source=» & mybook & «;Extended Properties=»»Excel 12.0;HDR=Yes;»»»

Luego se debe crear el string de consulta o SQL que se hace de la siguiente forma:

sql = «SELECT * FROM [» & «Hoja1$» & «] WHERE Ucase(» & a.Range(«H1») & «) LIKE Ucase(‘%» & a.Range(«I1») & «%’) AND pv » & a.Range(«K1″) & » » & a.Range(«L1″) & » ORDER BY ID ASC»

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

Quizá sea de utilidad también

Como contar celdas vacías en un rango

Como rellenar un pagaré en forma automática Conectando Excel con Word

Como buscar en listbox mientras se escribe en texto o a medida que se escribe

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

Luego se debe ejecutar la SQL con el siguiente código:

Set rs = cn.Execute(sql)

Con el código anterior lo que se hace es crear un objeto recordset, que es el objeto que contiene todos los datos filtrados de acuerdo con los criterios brindados, estos datos al ejecutar la sql se mantienen en memoria de la PC hasta que se liberen las variables.

Para pegar o mostrar los datos en la hoja de Excel se usa:

b.Cells(2, 1).CopyFromRecordset Data:=rs

En este caso los datos comienzan a copiarse desde la celda A2 en adelante, el código completo del ejemplo que hemos denominado Importar datos de Excel en Base a Criterios con SQL y Base de Datos Contenidos en Otro Libro, se presenta a continuación seguido al mismo se encuentra el link de descarga del archivo de ejemplo.

Código que se inserta en un módulo

Sub ConsutaSQLExcel()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim ctl As Object
Dim cn As ADODB.Connection, rs As ADODB.Recordset, sql As String
On Error Resume Next
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
Set a = Sheets(«Hoja1»)
Set b = Sheets(«Hoja2»)

mybook = ThisWorkbook.Path & «414 Conectar Excel con Excel Consulta SQL Base Datos.xlsx»
cn.Open «Provider=Microsoft.ACE.OLEDB.12.0;» & «Data Source=» & mybook & «;Extended Properties=»»Excel 12.0;HDR=Yes;»»»

If a.CheckBox1 = False Then
sql = «SELECT * FROM [» & «Hoja1$» & «] WHERE Ucase(» & a.Range(«H1») & «) LIKE Ucase(‘%» & a.Range(«I1») & «%’) AND pv » & a.Range(«K1″) & » » & a.Range(«L1″) & » ORDER BY ID ASC»
Else
sql = «SELECT * FROM [» & «Hoja1$» & «] WHERE Ucase(» & a.Range(«H1») & «) LIKE Ucase(‘» & a.Range(«I1») & «‘)AND pv » & a.Range(«K1″) & » » & a.Range(«L1″) & » ORDER BY ID ASC»
‘sql = «SELECT * FROM [» & «Hoja1$A1:V65000» & «] WHERE Ucase(» & a.Range(«H1») & «) LIKE Ucase(‘» & Range(«H2») & «‘) ORDER BY ID ASC»
End If

b.Cells.Clear
a.Range(«A1:G1»).Copy Destination:=b.Range(«A1»)
Set rs = cn.Execute(sql)
b.Cells(2, 1).CopyFromRecordset Data:=rs
b.Range(«B:B»).NumberFormat = «dd/mm/yyyy»
Set rs = Nothing
cn.Close
Set cn = Nothing
If b.Range(«A2») <> Empty Then
MsgBox («La busqueda se realizó con éxito»), vbInformation, «AVISO»
Else
MsgBox («No se encontraron regisgros para el criterio de búsqueda»), vbInformation, «AVISO»
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


.

If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.

Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends