| 2 kat, el 28 jun 2009, 20:35:46Gracias por su ayuda me podria ayudAR COMO HAGO PARA UNIR WORD EXCEL CON VISUAL Y PRESENTAR REPORTES E IMPRESIONES DEL MISMO SISTEMA DE MATRICULACION Responder a kat | 3 Elinv, el 29 jun 2009, 04:54:35Hola Kat, mirá este código, envia tu base de datos, o lo que tengas cargados en el select en esos momentos, a un archivo word que tu puedes crear.
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
Option Explicit
'----------------------
'Código realizado por Elinv
'Desde Bragado, Provincia de Buenos Aires, Rca. Argentina.
'por Luis Pedro Méndez.
'----------------------
'En este caso no se muestra Word, solamente se crea el archivo
'----------------------
Private Sub Command1_Click()
'declaramos variables
Dim filas As Integer, columnas As Integer
'averiguamos el número de registros
filas = Adodc1.Recordset.RecordCount
'lo mismo con la cantidad de campos del select
columnas = Adodc1.Recordset.Fields.Count
'llamamos a la función enviar a word, y le pasamos los datos requeridos
'nombre del control, cantidad de filas y columnas y el nombre y extensión del archivo destino.
worduno Adodc1, filas, columnas, "luis.doc"
End Sub
'función para enviar a word
Sub worduno(control_ado As Adodc, filas As Integer, columnas As Integer, nombre_archivo As String)
'si ocurre un error informamos y salimos
On Error GoTo ErrSub
'inicializamos la aplicación
Dim o_Word As Word.Application
'variable de documento
Dim Documento As Word.Document
'variable de tabla
Dim Parrafo As Table
'llamamos a la aplicación
Set o_Word = New Word.Application
'agregamos un documento nuevo
Set Documento = o_Word.Documents.Add
'creamos la tabla
Set Parrafo = Documento.Tables.Add(Documento.Range(0, 0), filas, columnas)
'declaramos variables para recorrer el select
Dim F As Long
Dim C As Integer
'Primero recorremos los registros
For C = 0 To filas - 1
'dentro de cada registro todos los campos y los asignamos a cada celda de la tabla en esa fila
For F = 0 To columnas - 1
Parrafo.Cell(C + 1, F + 1).Range.InsertAfter Adodc1.Recordset.Fields(F)
Next F
'La clausula condicional, es para que al mover al registro
'siguiente no envie un error si es el último registro
If Not control_ado.Recordset.EOF Then
'Si no es el ultimo registro mueve al siguiente
control_ado.Recordset.MoveNext
End If
Next C
'Graba en el path donde se ejecuta el programa con el nombre de archivo enviado
'Si deseara enviarlo a un directorio dentro, puedes incluirlo cuando llamas a la funcion
Documento.SaveAs (App.Path & "\" & nombre_archivo)
'cerramos el documento
Documento.Close
'quitamos la aplicación
o_Word.Application.Quit
'declaramos a nothing todas las variables
Set o_Word = Nothing
Set Documento = Nothing
Set Parrafo = Nothing
Exit Sub
ErrSub:
MsgBox Err.Description, vbCritical
On Error Resume Next
Documento.Close
o_Word.Application.Quit
Set Parrafo = Nothing
Set Documento = Nothing
Set o_Word = Nothing
End Sub
Private Sub Form_Load()
'declaramos variable
Dim base_de_datos
'asignamos el nombre de la base de datos -en este caso alumnos-
base_de_datos = "alumnos.mdb"
With Adodc1
.CursorLocation = adUseClient
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\" & base_de_datos & ";Persist Security Info=False"
.CommandType = adCmdText
'buscamos en tres campos de la tabla catedraticos
.RecordSource = "Select id_catedratico, numero_empleado, nombre_completo From catedraticos"
.Refresh
End With
'Lo asignamos al datagrid
'este datagrid lo pusimos para que visualices el resultado, dado que
'en muchos registros, veras como a medida que se envian los datos a Word
'el datagrid va moviendose por el registro que se envia.
Set DataGrid1.DataSource = Adodc1.Recordset
End Sub
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
Agrega al proyecto un ado control, un datagrid control, y una referencia a Microsoft Word
--------------------------------------------------------------------------------------------------
Todo esta debidamente explicado y la función y la organización previa del llamado a la función, lo tenes debidamente graficado y explicado.
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
Un abrazo.
Luis Pedro Méndez.
Dame un día y te estoy mandando el que corresponde a excell Responder a Elinv |
| 4 Elinv, el 29 jun 2009, 17:21:38Hola Kat, nuevamente:
Aquí te dejo este código para exportar a excell..
El código no es nuestro, es extraido de esta web:
http://www.recursosvisualbasic.com.ar/
Pero como esta muy bien hecho, facilmente entendible y explicado me parece que te puede ser util
--------------------------------------------------------------------------------------------------------------------
Option Explicit
Private Sub Command1_Click()
Dim sPathDB As String
Dim Consulta As String
' -- Path de la base de datos
sPathDB = App.Path & "\base_datos.MDB"
' -- Cadena Sql
Consulta = "Select nombre_completo, correo_electronico From catedraticos"
' -- Enviar el Path de la base de datos y la consulta sql
If Exportar_ADO_Excel(sPathDB, Consulta, App.Path & "\libro.xLS") Then
MsgBox "Ok", vbInformation
End If
End Sub
Private Function Exportar_ADO_Excel(sPathDB As String, Sql As String, sOutputPathXLS As String) As Boolean
On Error GoTo errSub
Dim cn As New ADODB.Connection
Dim rec As New ADODB.Recordset
Dim Excel As Object
Dim Libro As Object
Dim Hoja As Object
Dim arrData As Variant
Dim iRec As Long
Dim iCol As Integer
Dim iRow As Integer
Me.Enabled = False
' -- Abrir la base
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPathDB & ";"
' -- Abrir el Recordset pasándole la cadena sql
rec.Open Sql, cn
' -- Crear los objetos para utilizar el Excel
Set Excel = CreateObject("Excel.Application")
Set Libro = Excel.Workbooks.Add
' -- Hacer referencia a la hoja
Set Hoja = Libro.Worksheets(1)
Excel.Visible = True: Excel.UserControl = True
iCol = rec.Fields.Count
For iCol = 1 To rec.Fields.Count
Hoja.Cells(1, iCol).Value = rec.Fields(iCol - 1).Name
Next
If Val(Mid(Excel.Version, 1, InStr(1, Excel.Version, ".") - 1)) > 8 Then
Hoja.Cells(2, 1).CopyFromRecordset rec
Else
arrData = rec.GetRows
iRec = UBound(arrData, 2) + 1
For iCol = 0 To rec.Fields.Count - 1
For iRow = 0 To iRec - 1
If IsDate(arrData(iCol, iRow)) Then
arrData(iCol, iRow) = Format(arrData(iCol, iRow))
ElseIf IsArray(arrData(iCol, iRow)) Then
arrData(iCol, iRow) = "Array Field"
End If
Next iRow
Next iCol
' -- Traspasa los datos a la hoja de Excel
Hoja.Cells(2, 1).Resize(iRec, rec.Fields.Count).Value = GetData(arrData)
End If
Excel.Selection.CurrentRegion.Columns.AutoFit
Excel.Selection.CurrentRegion.Rows.AutoFit
' -- Cierra el recordset y la base de datos y los objetos ADO
rec.Close
cn.Close
Set rec = Nothing
Set cn = Nothing
' -- guardar el libro
Libro.saveAs sOutputPathXLS
Libro.Close
' -- Elimina las referencias Xls
Set Hoja = Nothing
Set Libro = Nothing
Excel.quit
Set Excel = Nothing
Exportar_ADO_Excel = True
Me.Enabled = True
Exit Function
errSub:
MsgBox Err.Description, vbCritical, "Error"
Exportar_ADO_Excel = False
Me.Enabled = True
End Function
Private Function GetData(vValue As Variant) As Variant
Dim x As Long, y As Long, xMax As Long, yMax As Long, T As Variant
xMax = UBound(vValue, 2): yMax = UBound(vValue, 1)
ReDim T(xMax, yMax)
For x = 0 To xMax
For y = 0 To yMax
T(x, y) = vValue(y, x)
Next y
Next x
GetData = T
End Function
--------------------------------------------------------------------------------------------------------------------
Simplemente en el formulario, agrega un commandbutton y una referencia a Microsoft ActiveX Data Objects 2.0 Library
en el mismo directorio pone una base de datos,
en esta variable pone el nombre de la base de datos
-------------
sPathDB = App.Path & "\base_datos.MDB"
--------------
en la Consulta pone el nombre de los campos que queres mostrar o todos (*) y el nombre de la tabla y echalo a andar.
Cualquier duda a tu disposición.
Un fuerte abrazo.
Luis Responder a Elinv |
|