Tiempo atrás explicaba un par de formas para obtener información a partir de un doble id de registro (ver 1 y ver 2).
Las técnicas empleadas, por supuesto, eran válidas, pero tenían el inconveniente que para grandes volúmenes de información se ralentizaba el proceso de cálculo en exceso.
Hoy veremos, como continuación del post anterior, la forma en que utilizando una sentencia SQL dentro de nuestro código VBA de programación obtener de manera mucho más ágil, la misma información
Partimos de nuestra información en dos hojas distintas, en la que código de producto está partido en dos columnas, haciendo cada Id único la combinación de dos campos....
No olvidemos habilitar la Referencia: Microsoft ActiveX Data Objects 6.x Library.
Insertamos el código de la función en un módulo estándar de nuestro proyecto de VBA desde el editor de VB:
El resultado lo vemos en las hoja 'Resultado':
La clave de la sentencia SQL empleada es la doble relación construida, que requiere la igualdad al mismo tiempo del campo 'Producto' y 'Num Id' para devolver el dato de Precio existente... (instrucción SQL LEFT JOIN.. AND).
Las técnicas empleadas, por supuesto, eran válidas, pero tenían el inconveniente que para grandes volúmenes de información se ralentizaba el proceso de cálculo en exceso.
Hoy veremos, como continuación del post anterior, la forma en que utilizando una sentencia SQL dentro de nuestro código VBA de programación obtener de manera mucho más ágil, la misma información
Partimos de nuestra información en dos hojas distintas, en la que código de producto está partido en dos columnas, haciendo cada Id único la combinación de dos campos....
No olvidemos habilitar la Referencia: Microsoft ActiveX Data Objects 6.x Library.
Insertamos el código de la función en un módulo estándar de nuestro proyecto de VBA desde el editor de VB:
Sub QueryDobleRelacion_SQL_Excel() 'Abrimos el editor de Visual Basic y en el menú de Herramientas clic en Referencias 'añadimos: Microsoft ActiveX Data Objects 6.x Library. Dim sConn As String Dim sSQL As String Dim oQt As QueryTable Dim sh As Worksheet Dim origen As String 'limpiamos la hoja destino Sheets("Resultado").Cells.ClearContents 'obtenemos la ruta completa y nombre del fichero de trabajo 'donde se encuentran los datos!!! origen = Application.ThisWorkbook.FullName 'establecemos la Sentencia de conexión para ficheros de Excel sConn = "ODBC;DSN=Excel Files;DBQ=" & origen & ";" 'escribimos el código SQL necesario para Relacionar según dos criterios la información de ambas tablas sSQL = "SELECT [Ppal$].[Num Id], [Ppal$].[Producto], [Precios$].[Precio]" & _ "FROM [Ppal$] LEFT JOIN [Precios$] ON " & _ "([Ppal$].[Producto] = [Precios$].[Producto]) AND ([Ppal$].[Num Id] = [Precios$].[Num Id]);" 'Generamos la Tabla resultante en la hoja final 'Resultado' Set sh = Sheets("Resultado") Set oQt = sh.QueryTables.Add(sConn, sh.Range("A1"), sSQL) 'Refresca la conexión y vuelca los datos... oQt.Refresh End Sub
El resultado lo vemos en las hoja 'Resultado':
La clave de la sentencia SQL empleada es la doble relación construida, que requiere la igualdad al mismo tiempo del campo 'Producto' y 'Num Id' para devolver el dato de Precio existente... (instrucción SQL LEFT JOIN.. AND).
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.