VB y Excel Urgenteeeee!!!!!!!!!!!!!!!!!!!!1

Laura
08 de Septiembre del 2005
Hola:
Por favor necesito ayuda, no se como puedo pasar datos desde un formulario de visual basic a Excel, también agradeceria un código con una breve explicación muchas gracias de antemano.

Sonia24
08 de Septiembre del 2005
hola, te mando el procedimiento que hice yo para exportar los elementos de un data grid a excel. Lo mas importante: pasarle el datagrid y los elementos que quieres exportar (eso lo puedes calcular con el recordcount del datagrid). No te hagas un lio con tanto indice, eso es para colocarlos bien en la hoja de excel. Prueba con un ejemplo sencillito y a partir de ahi ve añadiendo cositas. Por cierto, lamento que los comentarios esten en gallego, espero que no tengas problemas, son muy sencillitos de entender. Suerte


Public Sub exportar_excel(dg As DataGrid, filas As Long, Optional saldo As Double)
'Función que exporta o contido do datagrid ata un ficheiro de excel
'Debemos incluir unha referencia a "microsoft excel objet library"
Dim loexcel As Excel.Application 'Aplicación de excel
Dim libro As Excel.Workbook
Dim hoja As Excel.Worksheet
Dim indice_visibles As Integer
Dim i As Integer
Dim j As Integer

If filas = 0 Then 'Se non hai datos non facemos nada.
MsgBox "Non hai datos para exportar"
'ElseIf dg.Columns(0).CellValue(dg.GetBookmark(0)) <> "" Then

'ElseIf dg.Bookmark <> 1 Then
' MsgBox "Non se pode exportar se hai algunha fila seleccionada"

Else:
Set loexcel = CreateObject("Excel.Application")
Set libro = loexcel.Workbooks.Add
Set hoja = loexcel.ActiveSheet
loexcel.Visible = True

'Enchemos a folla de excel cos datos do datagrid

indice_visibles = 0
For i = 0 To dg.Columns.Count - 1
If dg.Columns(i).Visible Then 'so se imprimen as filas visibles do datagrid
indice_visibles = indice_visibles + 1
hoja.Cells(1, indice_visibles) = dg.Columns(i).Caption 'imprimimos a cabeceira da columna
' On Error Resume Next 'En caso de que o datagrid estivese vacío daría un erro, pero pasamos del.
For j = 0 To filas - 1 ' o resto debaixo
On Error Resume Next
hoja.Cells(j + 2, indice_visibles) = dg.Columns(i).CellValue(dg.GetBookmark(j))

Next
' On Error GoTo 0
End If
Next
If dg.Caption = "Movementos de caixa" Then
hoja.Cells(j + 4, 3) = "Total = "
hoja.Cells(j + 4, 4) = saldo
End If
hoja.Rows(1).Font.Bold = True 'Poñemos en negrita a primeira fila
On Error Resume Next
hoja.Columns("A:Z").AutoFit ' Facemos
End If
End Sub

avistrax
08 de Septiembre del 2005
me sirvio el codigo, te agradezco, es exelente

Rogelio
08 de Septiembre del 2005
Oye, yo tengo el problema con ese codigo, soy novatoy no se como utilizar el recordcount, tamposo como pasarle el datagrid a esa funcion, podrias ayudarme???

Sonia24
08 de Septiembre del 2005
por cierto, no hace falta que uses siempre un datagrid. En la cabecera del codigo que te pase ves que hay una variable llamada 'saldo'. Esa variable tambien la exporto a excel (y aparece en la hoja) y evidentemente no esta incluida en el datagrid.

Laura
08 de Septiembre del 2005
Hola Sonia, te agradezco tu ayuda mucho, pero todavía no funciona bien, el caso es que pasa los datos, pero no los guarda,he probado a ejecutarlo teniendo visible la hoja de excel, y efectivamente funciona pero no guarda los datos el programa por si solo, si no que al cerrar la aplicación excel me pregunta si deseo guardar los cambios, hay alguna forma de que se grabe desde el programa que he creado yo.Muchas gracias.

Chema
08 de Septiembre del 2005
Si lo que quieres es guardar la hoja de excel una vez exportados los datos. Se puede hacer sin demasiado problema. Te pongo un ejemplo:

Dim exapp As New Excel.Application
Dim libroActivo As Excel.Workbook

Set libroActivo = exapp.Workbooks.Open("c:miDirectorioplantilla.xsl") 'si quieres usar un documento con un formato ya definido, que por cierto es mucho más comodo que hacerdo desde vb
libroActivo.Activate

'Aqui exportas los datos que quieras
'El procedimiento de Sonia esta bien

libroActivo.SaveAs ("c:miDirectorioarchivoExcel")
libroActivo.Close (False)
set libroactivo= nothing

Espero que el código este bien pq bueno, he cortado y pegado de una aplicación y...

Laura
08 de Septiembre del 2005
He hecho lo que Sonia y tu me decís pero ahora me da errores de escritura en el fichero, "el fichero es de solo escritura","ya existe ¿desea reemplazarlo?" etc....

Chema
08 de Septiembre del 2005
A ver... quieres ir reemplazando cada vez el contenido del archivo o simplente quieres tener uno con el formato a modo de plantilla e ir guardando cada exportación en un archivo.xls nuevo??

Si lo que quieres es ir sobrescribiendo el archivo, en luegar de usar SaveAs utiliza Save (Esto casi seguro).Si sobrescribes debes tener mucho cuidado de no dejar información de la exportación anterior.

Si quiere ir generando archivos nuevos, simplente ten cuidado de darles nombre difentes, puedes por ejemplo colocarles: Trim(Format(Time, "hhmmss"))& "NombreArchivo"

Laura
08 de Septiembre del 2005
Hola a todos!
Ya tengo solucionado el anterior problema pero ahora lo que sucede es que siempre escribe encima de lo anterior, es decir tengo dos contadores filas y columnas que guardan donde se tiene que escribir pero al cerrar el programa y volver a abrir el valor de las variables se pierde y vuelve a escribir al principio, alguién sabe como llamar al final de fichero???, hay algo parecido al eof de los ficheros de texto??
gracias

Sonia24
08 de Septiembre del 2005
hola laura,
creo que ahi si que no te puedo ayudar y no se si lo podras hacer (yo por lo menos no se. Exporto los datos y luego para grabarlos lo hago desde el propio excel, como te pasa a ti). Una posible solucion seria esta (aunque tu veras si te convence): prueba algo asi:

1) abre desde visual un fichero excel y leelo (para verle el formato a los datos, como estan colocados etc...).Hazlo con open, get etc...

2)una vez que lo hayas hecho, haz tu lo mismo pero con tus datos y desde tu aplicacion, crea un fichero (con print etc..) con formato de excel .xls.

3) abrelo con excel a ver que pasa.si te funciona podras crear tus propios ficheros excel desde visual.

4)finalmente en el caso de que te funcionara todo, la prueba final sería hacer todo lo anterior (crear el fichero .xls..) y lanzar el excel desde basic con tu fichero. (Prueba con el comando Shell)

suerte

nota:todo esto es algo que se me ocurre, nunca lo he probado, yo hago lo que te pase y si el usuario lo quiere guardar lo guarda desde excel y asi le pone el nombre que quiera.

fedesin
08 de Septiembre del 2005
ya te gustaria que lo supiera verdad pos no lo se jaja suerte

Patac?
08 de Septiembre del 2005
Esta dirección te puede ayudar
http://www.vbalym.netfirms.com/index.html