Usuario
VBA - ¿Cómo hacer un consulta sql con INNER en tablas Excel?

Pregunta
-
Hola a todos.
Estoy tratando de hacer una consulta sql con INNER JOIN en dos tablas excel.
Cuando yo hago con una sola table logo éxito. Pero cuando pongo con las dos me sale un error de sintaxis.
Gracias de antemano por la ayuda.
1 - Mis hojas
La consulta sql haz un INNER con las hojas STOCK y VENTA
Cuando hago solo con una tabla no sale error.2 - Mi consulta / Mis tablas
El resultado de la consulta SQL se exhibe en la hoja Consultasql = "SELECT " & _ "p.producto , v.fecha_compra, v.cantidad " & _ "FROM [" & "stock$" & "] as p " & _ "INNER JOIN [" & "venta$" & "] as v " & "WITH(nolock) ON p.prod_id = v.prod_id " & _ "WHERE v.Fecha_compra >= #" & Format(CDate(b.Range("I1")), "mm/dd/yyyy") & "# " & _ "AND v.Fecha_compra <= #" & Format(CDate(b.Range("K1")), "mm/dd/yyyy") & "# " & _ "ORDER BY v.Fecha_compra ASC"
3 - El error
4 - El Código completo
Option Explicit Sub ConectarExcel() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim ctl As Object Dim cn As ADODB.Connection, rs As ADODB.Recordset, sql As String Dim a As Object Dim b As Object Dim c As Object 'on Error Resume Next Set cn = New ADODB.Connection Set rs = New ADODB.Recordset Set a = Sheets("stock") Set b = Sheets("venta") Set c = Sheets("consulta") 'Excel 2007 cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=Yes"";" 'MsgBox ("La conexión se realizó con exito"), vbInformation, "AVISO" Application.ScreenUpdating = True Application.DisplayAlerts = True ' Pesquisar datos 'sql = "SELECT * FROM [" & "venta$" & "] as v " & _ ' "WHERE v.Fecha_compra >= #" & Format(CDate(b.Range("I1")), "mm/dd/yyyy") & "# " & _ ' "AND v.Fecha_compra <= #" & Format(CDate(b.Range("K1")), "mm/dd/yyyy") & "# " & _ ' "ORDER BY v.Fecha_compra ASC" sql = "SELECT " & _ "p.producto , v.fecha_compra, v.cantidad " & _ "FROM [" & "stock$" & "] as p " & _ "INNER JOIN [" & "venta$" & "] as v " & "WITH(nolock) ON p.prod_id = v.prod_id " & _ "WHERE v.Fecha_compra >= #" & Format(CDate(b.Range("I1")), "mm/dd/yyyy") & "# " & _ "AND v.Fecha_compra <= #" & Format(CDate(b.Range("K1")), "mm/dd/yyyy") & "# " & _ "ORDER BY v.Fecha_compra ASC" c.Cells.Clear b.Range("A1:C1").Copy Destination:=c.Range("A1") Set rs = cn.Execute(sql) c.Cells(2, 1).CopyFromRecordset Data:=rs c.Range("C:C").NumberFormat = "dd/mm/yyy" Set rs = Nothing cn.Close Set cn = Nothing If c.Range("A2") <> Empty Then MsgBox ("La busqueda se realizó con éxito"), vbInformation, "AVISO" Else MsgBox ("No se encontraron registro para el criteiro de búsqueda"), vbInformation, "AVISO" End If Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
Gracias de antemano por la ayuda.
Saludos.
JoseBonfim
Todas las respuestas
-
-
José, buen día
consulta. Cuando respondes en este post "¿Probaste a crear la consulta en modo visual y ver la setencia que te crea?" a que te referís con crear la consulta en modo visual ?? porque me interesa saber como hacerlo para probarlo en un desarrollo que tengo que me está trayendo problemas con la sentencia de consulta sql...