RE:en tiempo de ejecucion una consulta sql en exce
Hola, te mando un ejemplo de una consulta que terminas de definir por seleccion de un combo y un ListBox.
En el ComboBox se encuentran los nombres de los directores (Supongamos que no existen nombres repetidos de directores). En el list Box, una lista de Maestros sin Apellidos repetidos (aunque puede existir en mi base de datos).
Cuando uno selecciona a un Director y a Un Maestro de la Lista
Me envia a Excel la informacion del Maestro o los Maestros que tiene igual apellido y pertenecen a un director determinado.
'---------------------------------------------------------------------------------------------------------
Private Sub Command1_Click ()
Cn as New ADODB.connection
Rs as New ADODB.Recordset
Dim SQL as String
SQL = "SELECT Docentes.Nombre, Docentes.Apellido, Docentes.Telefono, Docentes.Direccion, Directores.Director " _
& "FROM Docentes INNER JOIN Directores ON Docentes.FK = Directores.PK "
& "WHERE Apellido = ' " & List1.Text & " ' ) " _
& "AND Director = ' " & combo2.text & " ' ) " _
& "ORDER BY Docentes.Apellido; "
Cn.Open "DSN=Nomb_Archivo.mdb"
Rs.CursorType = adOpenStatic
Rs.LockType = adLockBatchOptimistic
Rs.Open SQL, cn, , adLockBatchOptimistic
IF Rs.EOF = False Then
DetectExcel
'Supongamos que tenes una plantilla diceñada y queres que los datos se
'carguen en ella.
Set mixl = GetObject("c:\NombArchivo_Excel.xls")
mixl.Application.Visible = True
mixl.Parent.Windows(1).Visible = True
Set wkbobj = GetObject("C:\NombArchivo_Excel.xls")
Rs.MoveFirst
Dim Kp as integer
Kp = 2
With wkbobj.Worksheets(2) 'Conexion con la Tabla Excel Tabla 2
WHILE Rs.EOF=False
.Range("A" & kP).Value = Rs.Fields(0).Value 'Celda Nombre
.Range("B" & kP).Value = Rs.Fields(1).Value 'Celda Apellido
.Range("C" & kP).Value = Rs.Fields(3).Value 'Celda Telefono
.Range("D" & kP).Value = Rs.Fields(0).Value 'Celda Direccion
Rs.moveNext
Kp = Kp +1
WEND
Set mixl = Nothing
Rs.close
Set Rs=Nothing
End If
END SUB
'------------------------------------------------------------------------------------------------------
Sub DetectExcel()
' El procedimiento detecta que Excel está en ejecución y lo registra.
Const WM_USER = 1024
Dim hWnd As Long
' Si se está ejecutando Excel, esta llamada a la API devuelve el controlador.
hWnd = FindWindow("XLMAIN", 0)
If hWnd = 0 Then ' 0 quiere decir que Excel no se está ejecutando .
Exit Sub
Else
' Excel se está ejecutando, por lo que se utiliza la función SendMessage de la API
' para introducirlo en la tabla Running Object.
SendMessage hWnd, WM_USER + 18, 0, 0
End If
End Sub
'-------------------------------------------------------------------------------------------------------
'Modulo podes agregar uno y lo copias tal cual.
' Declara las rutinas API necesarias:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As Long) As Long
Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long _
, ByVal wParam As Long _
, ByVal lParam As Long) As Long
Public intRows 'Numero de filas para el grafico
'----------------------------------------------------------------------------------------------------
El libro de excel cuenta con tres hojas y nosotros enviamos la informacion a la hoja numero 2.
Bueno Espero que el ejemplo te sea de ayuda.
Arnaldo.
A.A.V