Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

access y excel

20 views
Skip to first unread message

jorge

unread,
Jun 28, 2004, 5:58:06 AM6/28/04
to
Hola grupo: un departamento de la empresa toma los datos de producción
mediante una "base de datos" en excel. Me han pedido que haga una base de
datos en Access para almacenar esos datos, creando un entorno más amigable.
Pero luego, a la hora de mostrar esos datos, sería más eficiente hacerlo a
través de excel. ¿Puedo poner un botón en mi base de datos que abra excel y
le pase los datos a unas celdas determinadas? ¿Cómo? Pero aún hay algo más
interesante: las tablas en excel ya están creadas. Algunos de los datos que
contiene, son introducidos por un operador. Otros, son cálculos que realiza
la hoja con los datos introducidos. Si envío los datos desde access a las
celdas correspondientes ¿seguirá excel haciendo los cálculos? Sería un
considerable ahorro de tiempo y trabajo.

Muchas gracias


leandro (2x3)

unread,
Jun 28, 2004, 6:14:07 AM6/28/04
to
Hola,

Puedes manipular una hoja de excel a tu gusto desde access.

Yo lo hago de la siguiente forma, si bien, hay mas y mejores, sin duda.

Private Sub Comando0_Click()
Dim libro As Workbook
Dim hoja, hoja2 As Worksheet
Dim nombre As String
Dim aux


nombre = "c:\archivo.xls"
Set objexcel = New Excel.Application
objexcel.Visible = False
With objexcel
Set libro = .Workbooks.Open(nombre)
Set hoja = .Worksheets("nombre_de_la_hoja_de_calculo")

End With

With hoja

.Cells(2, 1) = "Pongo algo en la celda 2,1"
.Cells(2, 2) = "Pongo algo en la celda 2,2"

aux = (.Cells(2, 4)) 'Recupera algo de la celda 2,4


End With


End If

libro.Saved = True 'le digo que guarde los cambios y no pregunte
libro.Close


Set hoja = Nothing
Set hoja2 = Nothing

Set objexcel = Nothing


End Sub


un saludo
leandro


"jorge" <jorgemu...@SPAMplanasa.com> escribió en el mensaje
news:eggpaZP...@tk2msftngp13.phx.gbl...

jorge

unread,
Jun 28, 2004, 6:26:13 AM6/28/04
to
Muchas gracias Leandro. Si alguien conoce alguna otra forma, me gustaría
compararla con este ejemplo (que en principio parece valerme). Saludos.

"leandro (2x3)" <dosx...@hotmail.com> escribió en el mensaje
news:OUeeujP...@TK2MSFTNGP10.phx.gbl...

jorge

unread,
Jun 28, 2004, 7:03:33 AM6/28/04
to
Hola otra vez, Leandro: He probado con una hoja muy sencilla y una BD
también muy sencilla para probar y no me ha funcionado. El fallo está en que
no me reconoce las definiciones. Cuando defino "As Workbook", "As Worksheet"
y "New Excel.Application", no aparecen en la lista desplegable, ni las pone
automáticamente en mayúsculas, ni en azul. ¿Hay que añadir alguna referencia
o algo así? He repasado el código y lo tengo según me indicas. Gracias.


"leandro (2x3)" <dosx...@hotmail.com> escribió en el mensaje
news:OUeeujP...@TK2MSFTNGP10.phx.gbl...

Gregorio Suarez

unread,
Jun 28, 2004, 7:21:41 AM6/28/04
to
Hola Jorge:

Desde el módulo de código, vete al menú Herramientas/Referencias y marca la
referencia Microsoft Excel Object Library

Con eso tendrá que funcionarte.

Un saludo.

GS


"jorge" <jorgemu...@SPAMplanasa.com> escribió en el mensaje
news:OIAN$9PXEH...@TK2MSFTNGP12.phx.gbl...

karlitox

unread,
Jun 28, 2004, 7:22:49 AM6/28/04
to
Hay que añadir la referencia a Microsoft Excel x.0 Object Library

Saludos


jorge

unread,
Jun 28, 2004, 7:52:23 AM6/28/04
to
Hola y gracias por contestar. He hecho lo que me indicais, pero algo falla,
porque no veo cambios en la hoja. El ejemplo que he creado es sencillísimo:
una hoja de excel con tres columnas "elemento1", "elemento2" y "suma". POr
supuesto, "suma" muestra la suma de las celdas de elementos.

He creado una base de datos con los campos elemento1 y elemento2. Y en el
formulario para introducir los datos, un botón para enviarlos a excel. Lo
envío y no da ningún error, pero no hay ningún cambio en la hoja de excel,
que está vacía. Por cierto, uso office XP. Os pongo el código de la prueba,
para ver si veis algún fallo:

___________________________________________________________________________
Option Compare Database

Dim rst As New ADODB.Recordset
Dim libro As Workbook
Dim hoja As Worksheet
Dim nombre As String


Private Sub Comando4_Click()
Dim fila As Integer
rst.Open "Select * from tabla1", CurrentProject.Connection,
adOpenStatic, adLockOptimistic
nombre = "c:\documents and settings\jmunarriz\mis
documentos\pruebaCombinada.xls"


Set objexcel = New Excel.Application
objexcel.Visible = False

Set libro = objexcel.workbooks.Open(nombre)
Set hoja = objexcel.worksheets("Hoja1")

rst.MoveFirst
fila = 2
While Not rst.EOF
hoja.Cells(fila, 2) = rst.Fields("elemento1")
hoja.Cells(fila, 3) = rst.Fields("elemento2")
fila = fila + 1
rst.MoveNext
Wend

libro.saved = True
libro.Close
rst.Close
Set hoja = Nothing
Set objexcel = Nothing
Set rst = Nothing
End Sub
____________________________________________________________________________
_______


Gracias.

"Gregorio Suarez" <pri...@miemail.es> escribió en el mensaje
news:O$ElYIQXE...@TK2MSFTNGP09.phx.gbl...

leandro (2x3)

unread,
Jun 28, 2004, 9:40:43 AM6/28/04
to
Hola,

donde pone libro.save=true, esta diciendo que la hoja ya ha sido guardada
modificalo por libro.Save para que guarde los cambios

un saludo
leandro


"jorge" <jorgemu...@SPAMplanasa.com> escribió en el mensaje
news:uyZnRZQX...@TK2MSFTNGP12.phx.gbl...

Julius

unread,
Jun 28, 2004, 11:52:37 AM6/28/04
to
Hola Jorge

Este es un tema interesante que creo no explotamos suficientemente en
nuestras aplicaciones ;) Te voy a dar mis notas obtenidas de la
experiencia:

*) Con la referencia "Microsoft Excel Object Library" activada, a través del
Examinador de objetos y la ayuda de Access puedes descubrir todos los
objetos con sus métodos y propiedades: Workbook, Worksheet, Range, etc.
*) Descubrí un método de Range muy interesante que es el COPYFROMRECORDSET,
que hace justamente eso, copia TODOS los registros de un recordset en un
rango especificado
*) Como truco-consejo, graba macros en Excel con lo que quieras hacer y
después las editas con el editor de Visual Basic para conocer las órdenes
correspondientes y traspasarlas a tu Access

Te paso un pequeñas instrucciones de ayuda, he copiado y pegado cosas (no
funcionará al pie de la letra) pero sí están las ideas básicas:
-----------------------------------------------------------------

Public Function genera_sorteos_excel()
Dim miApp As Excel.Application
Dim milibro As Excel.Workbook, mihoja As Excel.Worksheet
Dim mirango As Excel.Range, hoja As Excel.Worksheet
Dim miRS As ADODB.Recordset

On Error GoTo err_sorteosxls

Set miRS = New ADODB.Recordset
Set miApp = New Excel.Application
Set milibro = miApp.Workbooks.Add
Set mihoja = miApp.Worksheets.Add
miApp.Visible = True 'YO LO DEJO VISIBLE PARA QUE LA PEÑA FLIPE UN RATO
AL VERLO y tb.para depurar mejor


miSQL = "SELECT * FROM tabla"
miRS.Open miSQL, CurrentProject.Connection, adOpenDynamic, adLockOptimistic

If miRS.EOF = False Then

mihoja.Cells(3, 1).Value = "Nº Sorteo"
mihoja.Cells(3, 2).Value = "Nº idea"
mihoja.Cells(3, 3).Value = "Matrícula"
mihoja.Cells(3, 4).Value = "Empleado"
mihoja.Cells(3, 5).Value = "F. Entrada"
mihoja.Cells(3, 6).Value = "Título de la idea"
mihoja.Cells(3, 7).Value = "F. Resolución"
mihoja.Cells(3, 8).Value = "Ahorro estim."
mihoja.Cells(3, 9).Value = "Estado"

'NO HACE FALTA BUCLE CON EL CopyFromRecordset
Set mirango = mihoja.Range(mihoja.Cells(4, 2), mihoja.Cells(4 +
nregistros, 9))
miRS.MoveFirst
mirango.CopyFromRecordset miRS
mihoja.Columns("B:I").AutoFit

Set mirango = mihoja.Range(mihoja.Cells(4, 1), mihoja.Cells(3 +
nregistros, 9))
mirango.Font.Name = "Arial"
mirango.Font.Size = 9
mirango.HorizontalAlignment = xlHAlignCenter

'Alineación izda para el nombre del empleado
Set mirango = mihoja.Range(mihoja.Cells(4, 4), mihoja.Cells(4 +
nregistros, 4))
mirango.HorizontalAlignment = xlHAlignLeft

'Formato fecha para la fecha de entrada
Set mirango = mihoja.Range(mihoja.Cells(4, 5), mihoja.Cells(4 +
nregistros, 5))
mirango.NumberFormat = "dd-mm-yy"

'Formato euro para el ahorro estimado y formato condicional en blanco si
ahorro = 0
Set mirango = mihoja.Range(mihoja.Cells(4, 8), mihoja.Cells(4 + nideas,
8))
mirango.NumberFormat = "#,##0.00 $"

miRS.Close
Set miRS = Nothing

milibro.SaveAs auxmas

miApp.Quit
Set miApp = Nothing


Espero que te sirva

¡¡¡ SUERTE !!!

-----------
Julius
Zaragoza

"jorge" <jorgemu...@SPAMplanasa.com> escribió en el mensaje
news:uyZnRZQX...@TK2MSFTNGP12.phx.gbl...

jorge

unread,
Jun 29, 2004, 2:35:04 AM6/29/04
to
Ya funciona correctamente. Muchas gracias a todos.

P.D.:Que bien funciona este grupo.


0 new messages