Excel y VB

Tengo un programa desarrollado en Excel (básicamente hojas de entrada de datos, otras de información, otras de cálculos a través de fórmulas matemáticas (sumas, multiplicaciones, decisiones, etc.) y finalmente una hoja que muestra resultados).
Quiero usar de base esta hoja de excel en un programa que estoy desarrollando en Visual Basic, en el cual accesaré la hoja de entrada de datos desde un Grid en Visual Basic y la hoja de resultados la mostraré con un reporte como Crystal Report o Active Report.
Para poder hacer esto y aprovechar algunas instrucciones SQL adjunté la hoja de resultados de Excel a Access, pero el problema ocurre que los datos introducidos desde el Grid no se actualizan en la hoja de Excel a menos que tenga abierto el libro, lo que no se ve nada profesional.
¿Cómo puedo corregir este problema?
Se me ocurre abrir Excel desde Visual Basic sin que el usuario se de cuenta para poder manipular los datos y usar el poder de Excel para los cálculos y así ver los resultados en el reporte.
Pero no se como hacer esto desde el código de Visual Basic y lógicamente descargarlo al cerrar la aplicación.
Además no se si aparecerá el mensaje de guardar cambios en Excel, lo que tampoco quiero que suceda.
Agradeceré tu ayuda a la brevedad.
Luis Cruz
[email protected]
1

1 Respuesta

200.775 pts.
Pues tu mismo te has respondido, así lo haría yo, abrir y manipular el archivo de Excel sin que el usuario se de cuenta, aunque dependiendo de lo que estés haciendo, la mayor parte se puede hacer perfectamente desde VB, pero te muestro al forma de abrir un archivo de Excel existente (también puedes crear uno nuevo)...
Private Sub cmdEnviarExcel_Click()
'El codigo es practicamente el mismo, solo que ahora
'agregamos los datos al archivo existente
Dim objArchivoXls As Object
Dim co1 As Integer
Dim intUltimo As Long
'Estas constantes son las usadas por Excel
Const xlDown As Integer = -4121
'Verifico que exista el archivo
If Len(Dir(App.Path & "\Temporal.xls")) > 0 Then
'Creo una instancia del archivo de Excel
Set objArchivoXls = GetObject(App.Path & "\Temporal.xls")
'objArchivoXls.Visible = True
With objArchivoXls.ActiveSheet
'Muestro el libro, por si esta oculta
.Parent.Windows("Temporal.xls").Visible = True
'Encontramos la ultima fila de mis datos
intUltimo = .Range("A1").End(xlDown).Row + 1
'Vaciamos algunos datos aleatorios de ejemplo
For co1 = intUltimo To intUltimo + 10
.Cells(co1, 1).Value = Int(Rnd() * 100 + 1)
.Cells(co1, 2).Value = Chr(Int(Rnd() * 25 + 65))
.Cells(co1, 3).Value = Int(Rnd() * 10 + 1)
.Cells(co1, 4).Value = Chr(Int(Rnd() * 25 + 65))
.Cells(co1, 5).Value = Int(Rnd() * 3 + 1)
.Cells(co1, 6).Value = Int(Rnd() * 50 + 1)
.Cells(co1, 7).Value = CDate(Int(Rnd() * 366 + 36570))
.Cells(co1, 8).Value = Chr(Int(Rnd() * 25 + 65))
Next co1
'Autoajuste de columnas
.Columns("A:H").EntireColumn.AutoFit
End With
'Guardamos el archivo, con esto no nos preguntara Excel
objArchivoXls.Save 'App.Path & "\Temporal.xls"
'Salimos de Excel
objArchivoXls.Parent.Quit
'Liberamos la memoria
Set objArchivoXls = Nothing
MsgBox "Proceso terminado"
Else
MsgBox "Archivo no existe"
End If
End Sub
Si quieres el ejemplo completo solicitalo a [email protected]
Te agradecería finalizaras esta pregunta, lo más rapido posible, algunos usuarios luego se tardan mucho, disculpa si no es tu caso.
Muchas gracias Valedor, probé el código que me enviaste para poder abrir Excel desde Visual Basic, obteniendo excelentes resultados.
Sinceramente muchas gracias, pero antes de cerrar mi consulta quiero que me amplíes un poco algunos detalles de hacer esto.
Sucede que estoy utilizando un Grid (el control active POR TrueDBGrid) a través de un control Data que accesa a la base de datos en Access y que es la adjunta de Excel, pero si abro Excel desde el evento Load de la forma principal para dejarlo cargado en memoria, los cambios que hago en el Grid actualizan Access y Excel pero el Grid empieza a comportarse de manera inestable (por ejemplo al cambiar un valor en la columna 3 se me cambia el de la columna 1 o sencillamente se cierra).
Se me ocurrió entonces abrir excel desde un botón command después de cargar la forma principal pero aparece un mensaje que dice que no es posible abrir Excel por que ya está abierto.
Entonces cambié el control Data por un DAO y Excel si se puede abrir posteriormente de cargar la forma pero al escribir un valor en el Grid tarda demasiado en actualizarse como que si se estuvieran calculando fórmulas.
No se que hacer, agradeceré de nuevo tu oportuna ayuda.
Muchas Gracias de Antemano
Luis Cruz
[email protected]
La programación es tan amplia como el número de programadores, por ello cada quien hacemos las cosas de diferente manera, con los datos que me das seria insuficiente para darte una opinión, por ejemplo, en lo personal, "casi" todo lo que hace Excel, lo puedes desarrollar desde tu aplicación, claro, dependiendo de lo que se quiera, será más o menos complicado, pero al combinar Excel, Access y VB, se puede llegar a perder un poco de orden, con gusto de ayudo, pero me es más fácil con código que con solo comentarios, por que seria fácil decirte que es el Crystal o Excel, cuando normalmente es el código que usamos, si quieres que le de un vistazo, comprime tu proyecto y envialo a [email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas