Reportes de Visual Basic a Excel
Quiero generar un reporte en excel a partir de una consulta hecha a una base de datos desde visual basic con instrucciones SQL. ?alguien me puede ayudar?
hello mira es facil anota esto....
en un modulo escribe esto
Public objExcel As Excel.Application
Public Function Inicio_Excel() As Boolean
Dim I As Integer
Dim J As Integer
Set objExcel = New Excel.Application
objExcel.Visible = True 'lo hacemos visible
objExcel.SheetsInNewWorkbook = 1 'decimos cuantas hojas queremos en el nuevo documento
objExcel.Workbooks.Add ' añadimos el objeto al workbook
End Function
Public Function Formato_Excel(Num_Campos As Integer, Nombre_Campos() As String) As Boolean
With objExcel.ActiveSheet
'Formato de las celdas de los titulos
.Range(.Cells(3, 1), .Cells(3, Num_Campos)).Borders.LineStyle = xlContinuous
.Range(.Cells(3, 1), .Cells(3, 8)).Font.Bold = True
For I = 1 To Num_Campos - 1 Step 1
.Cells(3, I) = Nombre_Campos(I)
Next I
'hasta aki pa colocar los titulos
'a partir de aki ta claro que es pa darle el ancho a las celdas ;-)
.Columns("A").ColumnWidth = 25
.Columns("B").ColumnWidth = 35
.Columns("C").ColumnWidth = 30
.Columns("D").ColumnWidth = 20
.Columns("E").ColumnWidth = 15
.Columns("F").ColumnWidth = 15
.Columns("G").ColumnWidth = 10
.Columns("H").ColumnWidth = 10
End With
End Function
************************************************
y luego en el formulario
Option Explicit
Dim H As Integer
Dim V As Integer
Private Sub Command1_Click()
DataTabla.DatabaseName = App.Path & "db1_97.mdb"
aqui genera tu recordset
dim recordset as new adodb.recordset
SQL="Select * from clientes where rut='15732689'
recordset.open SQL,mibase
Dim Heading(8) As String 'aki vamos a guardar los nombres de los campos que despues pasamos a la funcion
Heading(0) = "Nombre"
Heading(1) = "Apellidos"
Heading(2) = "Direccion"
Heading(3) = "Poblacion"
Heading(4) = "Provincia"
Heading(5) = "Pais"
Heading(6) = "Telefono"
Heading(7) = "DNI"
Call Inicio_Excel 'Llamamos a la funcion que abre el workbook en excel
Call Formato_Excel(8, Heading()) 'llamamos a la funcion que da el formato al nuevo workbook
V = 5
H = 1
Do While Not Recordset.EOF 'esto nos sirve pa leer los datos desde
'la tabla de access para despues colocarlos en las celdas correspondientes
With DataTabla.Recordset
objExcel.ActiveSheet.Cells(V, H) = .Fields!nombre
objExcel.ActiveSheet.Cells(V, H + 1) = .Fields!apellidos
objExcel.ActiveSheet.Cells(V, H + 2) = .Fields!direccion
objExcel.ActiveSheet.Cells(V, H + 3) = .Fields!poblacion
objExcel.ActiveSheet.Cells(V, H + 4) = .Fields!provincia
objExcel.ActiveSheet.Cells(V, H + 5) = .Fields!pais
objExcel.ActiveSheet.Cells(V, H + 6) = .Fields!telefono
objExcel.ActiveSheet.Cells(V, H + 7) = .Fields!dni
V = V + 1
recordset.MoveNext
End With
Loop
Set objExcel = Nothing 'una vez hemos terminado descargamos el objeto
End If
End Sub
en un modulo escribe esto
Public objExcel As Excel.Application
Public Function Inicio_Excel() As Boolean
Dim I As Integer
Dim J As Integer
Set objExcel = New Excel.Application
objExcel.Visible = True 'lo hacemos visible
objExcel.SheetsInNewWorkbook = 1 'decimos cuantas hojas queremos en el nuevo documento
objExcel.Workbooks.Add ' añadimos el objeto al workbook
End Function
Public Function Formato_Excel(Num_Campos As Integer, Nombre_Campos() As String) As Boolean
With objExcel.ActiveSheet
'Formato de las celdas de los titulos
.Range(.Cells(3, 1), .Cells(3, Num_Campos)).Borders.LineStyle = xlContinuous
.Range(.Cells(3, 1), .Cells(3, 8)).Font.Bold = True
For I = 1 To Num_Campos - 1 Step 1
.Cells(3, I) = Nombre_Campos(I)
Next I
'hasta aki pa colocar los titulos
'a partir de aki ta claro que es pa darle el ancho a las celdas ;-)
.Columns("A").ColumnWidth = 25
.Columns("B").ColumnWidth = 35
.Columns("C").ColumnWidth = 30
.Columns("D").ColumnWidth = 20
.Columns("E").ColumnWidth = 15
.Columns("F").ColumnWidth = 15
.Columns("G").ColumnWidth = 10
.Columns("H").ColumnWidth = 10
End With
End Function
************************************************
y luego en el formulario
Option Explicit
Dim H As Integer
Dim V As Integer
Private Sub Command1_Click()
DataTabla.DatabaseName = App.Path & "db1_97.mdb"
aqui genera tu recordset
dim recordset as new adodb.recordset
SQL="Select * from clientes where rut='15732689'
recordset.open SQL,mibase
Dim Heading(8) As String 'aki vamos a guardar los nombres de los campos que despues pasamos a la funcion
Heading(0) = "Nombre"
Heading(1) = "Apellidos"
Heading(2) = "Direccion"
Heading(3) = "Poblacion"
Heading(4) = "Provincia"
Heading(5) = "Pais"
Heading(6) = "Telefono"
Heading(7) = "DNI"
Call Inicio_Excel 'Llamamos a la funcion que abre el workbook en excel
Call Formato_Excel(8, Heading()) 'llamamos a la funcion que da el formato al nuevo workbook
V = 5
H = 1
Do While Not Recordset.EOF 'esto nos sirve pa leer los datos desde
'la tabla de access para despues colocarlos en las celdas correspondientes
With DataTabla.Recordset
objExcel.ActiveSheet.Cells(V, H) = .Fields!nombre
objExcel.ActiveSheet.Cells(V, H + 1) = .Fields!apellidos
objExcel.ActiveSheet.Cells(V, H + 2) = .Fields!direccion
objExcel.ActiveSheet.Cells(V, H + 3) = .Fields!poblacion
objExcel.ActiveSheet.Cells(V, H + 4) = .Fields!provincia
objExcel.ActiveSheet.Cells(V, H + 5) = .Fields!pais
objExcel.ActiveSheet.Cells(V, H + 6) = .Fields!telefono
objExcel.ActiveSheet.Cells(V, H + 7) = .Fields!dni
V = V + 1
recordset.MoveNext
End With
Loop
Set objExcel = Nothing 'una vez hemos terminado descargamos el objeto
End If
End Sub
