Visual Basic para Aplicaciones - ¿Cómo cambiar hojas a tablas y ejecutar consulta desde VBA?

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 3
Ha disminuido su posición en 26 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

¿Cómo cambiar hojas a tablas y ejecutar consulta desde VBA?

Publicado por Jose L. Bonfim (2 intervenciones) el 30/11/2019 17:13:08
Hola a todos.
Tengo tres hojas de una Plantilla excel.
Necesito ejecutar los procedimientos:
1 - Cambiar hojas en tablas
2 - Ocultar las hojas Producto e Venta
3 - Ejecutar consultas con vba

¿Alguien podria arreglar mi código?

A - Plantilla - hoja Producto/Venta
tabla_prod_venta

B - Consulta desde VBA
1
2
3
4
5
select
p.producto, v.fecha_compra,v.cantidad
from producto p
inner join venta v with(nolock) on p.prod_id = v.prod_id
where v.fecha_compra between '2019-09-30' and '2019-11-30'

C - Resultado
resultado

D - Código para arreglo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Option Explicit
Public Sub sb_consulta()
Dim str_PlanilhaDestino As String
 
str_PlantilhaDestino = "Consulta"
 
'Limpiar Datos
Range(str_PlantilhaDestino).Clear
 
'Busqueda
'Está pendiente completar la consulta
 
select
p.producto , v.fecha_compra, v.cantidad
from producto p
inner join venta v with(nolock) on p.prod_id = v.prod_id
where v.fecha_compra between '2019-09-30' and '2019-11-30'
 
End Sub

Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 3
Ha disminuido su posición en 26 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

¿Cómo cambiar hojas a tablas y ejecutar consulta desde VBA?

Publicado por Jose L. Bonfim (2 intervenciones) el 01/12/2019 02:56:00
Bueno , ya he caminado mas adelante.
He cambiando el código y loo que me falta es arreglar el error que me sale cuando hago la consulta con dos tablas.

1 - Mis hojas
vegetais_conexion

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
consulta

El resultado de la consulta SQL se exhibe en la hoja Consulta
1
2
3
4
5
6
7
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"

3 - El error
error1

4 - El Código completo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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 qualquier ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar