De Visual a Excel
Tengo un grid y en ese grid datos de una tabla, mediante un boton guardar, paso esos datos a un documento excel, pero en este documeno me salen los datos desordenados, sin separaciones y que queda horrible vamos que eso no se puede imprimir asi, pero si le meto en la colocacion del grid alguna separacion o algo asi me come los datos, que manera hay de hacer que los datos lleguen bien o hacer una plantilla en excel o alguna solucion por favor
gracias
gracias
Si lo que quieres es enviar datos tipo texto:
AreaHojaEx.Cells(Fila, Columna) = "'" & celdadelgrid
Los demás datos pueden ir con funciones como FORMAT:
AreaHojaEx.Cells(Fila, Columna) = "'" & FORMAT(celdadelgrid,"Standard")
Si quieres que las columnas en la hoja de excel tengan el ancho automático:
AreaHojaEx.Columns(Columna).AutoFit
Si quieres que la alineación dentro de la columna en excel sea centrada:
AreaHojaEx.Columns(Columna).HorizontalAlignment = xlHAlignRight
Donde AreaHojaEx está:
Dim AreaHojaEx As Excel.Worksheet
Cualquier cosa puedes ser más específico y trataré de ayudarte
AreaHojaEx.Cells(Fila, Columna) = "'" & celdadelgrid
Los demás datos pueden ir con funciones como FORMAT:
AreaHojaEx.Cells(Fila, Columna) = "'" & FORMAT(celdadelgrid,"Standard")
Si quieres que las columnas en la hoja de excel tengan el ancho automático:
AreaHojaEx.Columns(Columna).AutoFit
Si quieres que la alineación dentro de la columna en excel sea centrada:
AreaHojaEx.Columns(Columna).HorizontalAlignment = xlHAlignRight
Donde AreaHojaEx está:
Dim AreaHojaEx As Excel.Worksheet
Cualquier cosa puedes ser más específico y trataré de ayudarte
Indicaste que lo tienes en un botón.
Hazme llegar el código de tu pase desde visual a excel (el que te sale desordenado)
Hazme llegar el código de tu pase desde visual a excel (el que te sale desordenado)
Private Sub guardar_Click()
Dim fso As New FileSystemObject
Dim fichero As TextStream
Dim texto As String
For i = 0 To grimi.Rows - 1
For j = 0 To grimi.Cols - 1
texto = texto & grimi.TextMatrix(i, j) & " "
Next j
texto = texto & vbCrLf
Next i
control.Filter = "Archivos de Texto (*.txt)|*.txt|Todos los Archivos (*.*)|*.*"
control.FilterIndex = 2
control.ShowSave
Set fichero = fso.OpenTextFile(control.FileName, ForWriting)
fichero.Write texto
End Sub
ESTE ES EL CODIGO QUE TENGO EN EL BOTON GUARDAR, MEDIANTE EL CUAL GUARDO EL LISTADO EN UN DOCUMENTO EXCEL PERO ME APARECE DE MANERA QUE NO SE PUEDE IMPRIMIR PORQUE QUEDA MUY MAL
Dim fso As New FileSystemObject
Dim fichero As TextStream
Dim texto As String
For i = 0 To grimi.Rows - 1
For j = 0 To grimi.Cols - 1
texto = texto & grimi.TextMatrix(i, j) & " "
Next j
texto = texto & vbCrLf
Next i
control.Filter = "Archivos de Texto (*.txt)|*.txt|Todos los Archivos (*.*)|*.*"
control.FilterIndex = 2
control.ShowSave
Set fichero = fso.OpenTextFile(control.FileName, ForWriting)
fichero.Write texto
End Sub
ESTE ES EL CODIGO QUE TENGO EN EL BOTON GUARDAR, MEDIANTE EL CUAL GUARDO EL LISTADO EN UN DOCUMENTO EXCEL PERO ME APARECE DE MANERA QUE NO SE PUEDE IMPRIMIR PORQUE QUEDA MUY MAL
Agrega al proyecto la referencia: Microsoft Excel 9.0 Object Library
Nota: debes tener Excel 5.0 o superior
En el sub del botón vas a colocar:
'declaración de los objetos tipo Aplicación Excel, Libro y hoja
Dim ApplEx As Excel.Application
Dim AreaLibroEx As Excel.Workbook
Dim AreaHojaEx As Excel.Worksheet
'darle valores a los objetos excel
Set ApplEx = CreateObject("excel.application")
Set AreaLibroEx = ApplEx.Workbooks.Add
Set AreaHojaEx = AreaLibroEx.Worksheets(1)
'recorrer el grid y pasar los valores a cada celda de la hoja de excel
For i = 0 To grimi.Rows - 1
For j = 0 To grimi.Cols - 1
AreaHojaEx.Cells(i+1,j+1)=grimi.TextMatrix(i, j)
next
next
para darle formatos a la hoja
revisa el primer código que te envíe
conociéndo las columnas de la hoja de excel, puedes pasarle propiedades de centrado, ancho. etcétera.
Revisa:
AutoFit
HorizontalAlignment
ColumnWidth
para el objeto AreaHojaEx y su propiedad Columns
Para terminar, antes del end del sub del botón, te aconsejo y coloques:
Set ApplEx = Nothing
Set AreaLibroEx = Nothing
Set AreaHojaEx = Nothing
para así liberar un poco la memoria, sobre todo en los recursos del Office
Nota: debes tener Excel 5.0 o superior
En el sub del botón vas a colocar:
'declaración de los objetos tipo Aplicación Excel, Libro y hoja
Dim ApplEx As Excel.Application
Dim AreaLibroEx As Excel.Workbook
Dim AreaHojaEx As Excel.Worksheet
'darle valores a los objetos excel
Set ApplEx = CreateObject("excel.application")
Set AreaLibroEx = ApplEx.Workbooks.Add
Set AreaHojaEx = AreaLibroEx.Worksheets(1)
'recorrer el grid y pasar los valores a cada celda de la hoja de excel
For i = 0 To grimi.Rows - 1
For j = 0 To grimi.Cols - 1
AreaHojaEx.Cells(i+1,j+1)=grimi.TextMatrix(i, j)
next
next
para darle formatos a la hoja
revisa el primer código que te envíe
conociéndo las columnas de la hoja de excel, puedes pasarle propiedades de centrado, ancho. etcétera.
Revisa:
AutoFit
HorizontalAlignment
ColumnWidth
para el objeto AreaHojaEx y su propiedad Columns
Para terminar, antes del end del sub del botón, te aconsejo y coloques:
Set ApplEx = Nothing
Set AreaLibroEx = Nothing
Set AreaHojaEx = Nothing
para así liberar un poco la memoria, sobre todo en los recursos del Office
Mirando el código que te indiqué, olvidé algo muy importante:
escribe:
ApplEx.Visible = True
para poder mostrar la hoja
esto va antes del
Set ApplEx = Nothing
Set AreaLibroEx = Nothing
Set AreaHojaEx = Nothing
es decir, al final de todos los valores y propiedades que hayas trabajado
escribe:
ApplEx.Visible = True
para poder mostrar la hoja
esto va antes del
Set ApplEx = Nothing
Set AreaLibroEx = Nothing
Set AreaHojaEx = Nothing
es decir, al final de todos los valores y propiedades que hayas trabajado
perdonar me tengo que ir mañana estoy hasta las 2:30 me encantaria que me siguierais ayudando por favor espero que esteis muchas gracias
seguire intentandolo mañana
seguire intentandolo mañana
Calma, creo que la 11.0 es válida pero hay que investigar cuál es la versión inferior del Office que soporta.
Prueba a ver el resultado de:
ApplEx.Version
después del
Set ApplEx = CreateObject("excel.application")
Prueba a ver el resultado de:
ApplEx.Version
después del
Set ApplEx = CreateObject("excel.application")
colocalo como una pregunta para continuar o no con el traslado de los datos
Set ApplEx = CreateObject("excel.application")
If ApplEx.Version > "6.0" Then
Set AreaLibroEx = ApplEx.Workbooks.Add
Set AreaHojaEx = AreaLibroEx.Worksheets(1)
.
.
.
.
ApplEx.Visible = True
end if
Set ApplEx = CreateObject("excel.application")
If ApplEx.Version > "6.0" Then
Set AreaLibroEx = ApplEx.Workbooks.Add
Set AreaHojaEx = AreaLibroEx.Worksheets(1)
.
.
.
.
ApplEx.Visible = True
end if