Borrar celdas y acceder a ACCESS

04/03/2005 - 11:52 por Principiante | Informe spam
Hola grupo, estoy haciendo una aplicación en ACCESS y tengo que abrir un
archivo de EXCEL e ir a una hoja determinada para traspasar una
información desde una tabla de ACCESS. Esto lo se hacer pero lo que no
se es como hacer (por código) para borrar todo el contenido de esa hoja
antes de hacer el traspaso de información desde la tabla de ACCESS.
Necesito hacerlo pues siempre voy escribiendo sobre la misma hoja en
cada traspaso.

Supongo que será sencillo pero es que en EXCEL no he hecho nada con código.

Otra cosilla que si que la veo algo mas difícil (para mi claro). Una vez
tengo hecho el traspaso, me quedan 2 columnas "CODIGO" y "DESCRIPCION"
con los datos de la tabla X de ACCESS. Bien, pues ahora lo que se me
plantea es como hacer para que si se desea en la columna CODIGO añadir
otro (por ejemplo el 8), acceder a la tabla X de ACCESS (mediante código
desde EXCEL) para que aparezca de forma automática la DESCRIPCION al
lado (correspondiente al código 8 de la tabla claro). Sería saber como
asignar a toda la columna de CODIGO un evento "AL SALIR" o algo así para
que busque en la tabla de ACCESS.

Esto si que es verdad que no se como hacerlo en EXCEL pues no he usado
código nunca en EXCEL. Me han pasado código para acceder a la tabla de
ACCESS pero no se como hacer que se ejecute cuando "SALGA" de alguna
celda de la columna CODIGO.

Muchísimas gracias por cualquier ayuda.

Principiante.

Preguntas similare

Leer las respuestas

#1 Fernando Arroyo
04/03/2005 - 12:09 | Informe spam
"Principiante" escribió en el mensaje news:
Hola grupo, estoy haciendo una aplicación en ACCESS y tengo que abrir un
archivo de EXCEL e ir a una hoja determinada para traspasar una
información desde una tabla de ACCESS. Esto lo se hacer pero lo que no
se es como hacer (por código) para borrar todo el contenido de esa hoja
antes de hacer el traspaso de información desde la tabla de ACCESS.
Necesito hacerlo pues siempre voy escribiendo sobre la misma hoja en
cada traspaso.

Supongo que será sencillo pero es que en EXCEL no he hecho nada con código.





Prueba con algo parecido a:

Worksheets("NombreDeLaHoja").Cells.Delete

Tendrás que modificarla (supongo), dependiendo de cómo tengas el código. Si, por ejemplo, la hoja estuviera situada en un objeto Workbook llamado wkbLibro, la instrucción podría ser:

wkbLibro.Worksheets("NombreDeLaHoja").Cells.Delete


Otra cosilla que si que la veo algo mas difícil (para mi claro). Una vez
tengo hecho el traspaso, me quedan 2 columnas "CODIGO" y "DESCRIPCION"
con los datos de la tabla X de ACCESS. Bien, pues ahora lo que se me
plantea es como hacer para que si se desea en la columna CODIGO añadir
otro (por ejemplo el 8), acceder a la tabla X de ACCESS (mediante código
desde EXCEL) para que aparezca de forma automática la DESCRIPCION al
lado (correspondiente al código 8 de la tabla claro). Sería saber como
asignar a toda la columna de CODIGO un evento "AL SALIR" o algo así para
que busque en la tabla de ACCESS.

Esto si que es verdad que no se como hacerlo en EXCEL pues no he usado
código nunca en EXCEL. Me han pasado código para acceder a la tabla de
ACCESS pero no se como hacer que se ejecute cuando "SALGA" de alguna
celda de la columna CODIGO.




Enrique Martínez "SoftJaen" escribió un gran artículo sobre la forma de trabajar con ADO y DAO en Excel:

http://www.mvp-access.com/softjaen/..._excel.htm

Muchísimas gracias por cualquier ayuda.

Principiante.



Un saludo.


Fernando Arroyo
MS MVP - Excel
Respuesta Responder a este mensaje
#2 Principiante
04/03/2005 - 12:27 | Informe spam
Gracias Fernando por la información.

Lo primero ha funcioando a las mil maravillas.

Voy a echar un vistazo a la página a ver si saco algo que me pueda valer.

Este es el código que me pasaron que tendría que adaptar para hacer lo
que comento, es decir, que al salir de una celda de la columna código se
ejecute la función (el código estaba pensado para cuando se tiene sólo
la columna CODIGO con los códigos y que se recorra para poner las
DESCRIPCIONES pero como yo ya los tengos sería adaptarla para cuando se
ponga un código nuevo en una celda vacía de la columna):

public sub Recorre()
dim dbMiDB as DAO.Database, rsMiRS as DAO.Recordset,i as integer
Set dbMiDB = DBEngine.Workspaces(0).OpenDatabase([Aquí pon tu base de
datos con ruta completa])
Set rsMiRS=dbMiDB.OpenRecordset([Aqui pon tu origen de
datos],dbOpenSnapshot)
'Recorro la columna hasta que no haya datos. Inicializo los datos
i=1'Primera fila
do until cells(i,1)=""
rsMiRS.FindFirst "CODIGO=" & Cells(i,1)
if not rsMiRS.NoMatch then
cells(i,2)=rsMiRS.Fields("DESCRIPCION")
end if
i=i+1
loop
rsMiRS.close
set rsMiRS=nothing
dbMiDB.close
set dbMiDB=nothing
end sub

Repito que el código en parte me podría valer y lo adaptaría para hacer
lo que quiero, pero por ejemplo, como hacer para que al salir de una
celda se ejecute por ejemplo un MSGBOX en EXCEL?

Quisiera saber eso para entonces intentar lo que comento accediendo
desde EXCEL a la tabla del MDB.

Gracias de nuevo.

Principiante.


Fernando Arroyo escribió:
"Principiante" escribió en el mensaje news:

Hola grupo, estoy haciendo una aplicación en ACCESS y tengo que abrir un
archivo de EXCEL e ir a una hoja determinada para traspasar una
información desde una tabla de ACCESS. Esto lo se hacer pero lo que no
se es como hacer (por código) para borrar todo el contenido de esa hoja
antes de hacer el traspaso de información desde la tabla de ACCESS.
Necesito hacerlo pues siempre voy escribiendo sobre la misma hoja en
cada traspaso.

Supongo que será sencillo pero es que en EXCEL no he hecho nada con código.






Prueba con algo parecido a:

Worksheets("NombreDeLaHoja").Cells.Delete

Tendrás que modificarla (supongo), dependiendo de cómo tengas el código. Si, por ejemplo, la hoja estuviera situada en un objeto Workbook llamado wkbLibro, la instrucción podría ser:

wkbLibro.Worksheets("NombreDeLaHoja").Cells.Delete



Otra cosilla que si que la veo algo mas difícil (para mi claro). Una vez
tengo hecho el traspaso, me quedan 2 columnas "CODIGO" y "DESCRIPCION"
con los datos de la tabla X de ACCESS. Bien, pues ahora lo que se me
plantea es como hacer para que si se desea en la columna CODIGO añadir
otro (por ejemplo el 8), acceder a la tabla X de ACCESS (mediante código
desde EXCEL) para que aparezca de forma automática la DESCRIPCION al
lado (correspondiente al código 8 de la tabla claro). Sería saber como
asignar a toda la columna de CODIGO un evento "AL SALIR" o algo así para
que busque en la tabla de ACCESS.

Esto si que es verdad que no se como hacerlo en EXCEL pues no he usado
código nunca en EXCEL. Me han pasado código para acceder a la tabla de
ACCESS pero no se como hacer que se ejecute cuando "SALGA" de alguna
celda de la columna CODIGO.





Enrique Martínez "SoftJaen" escribió un gran artículo sobre la forma de trabajar con ADO y DAO en Excel:

http://www.mvp-access.com/softjaen/..._excel.htm


Muchísimas gracias por cualquier ayuda.

Principiante.




Un saludo.


Fernando Arroyo
MS MVP - Excel
Respuesta Responder a este mensaje
#3 Fernando Arroyo
04/03/2005 - 13:15 | Informe spam
He modificado el código que pones para poder hacer algunas pruebas con una base de datos que tengo:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Then Exit Sub
Dim dbMiDB As DAO.Database, rsMiRS As DAO.Recordset
Set dbMiDB = DBEngine.Workspaces(0).OpenDatabase("C:\prueba.mdb")
Set rsMiRS = dbMiDB.OpenRecordset("Productos", dbOpenSnapshot)

rsMiRS.FindFirst "CódigoProducto=" & Target
If Not rsMiRS.NoMatch Then
Application.EnableEvents = False
Target.Offset(, 1) = rsMiRS.Fields("NombreProducto")
Application.EnableEvents = True
End If

rsMiRS.Close
Set rsMiRS = Nothing
dbMiDB.Close
Set dbMiDB = Nothing
End Sub

Tendrías que poner los nombres de tu base de datos, la tabla, los campos...

Si lo pegas en el módulo de la hoja (click derecho sobre su etiqueta->Ver código), cada vez que se modifique una celda de la columna A automáticamente se buscará el valor de la celda en la tabla de Access y, si se encuenta, se pondrá el contenido de otro campo (en este caso, NombreProducto) en la celda de la columna B de la fila que se acaba de modificar.
Un saludo.


Fernando Arroyo
MS MVP - Excel

"Principiante" escribió en el mensaje news:%
Gracias Fernando por la información.

Lo primero ha funcioando a las mil maravillas.

Voy a echar un vistazo a la página a ver si saco algo que me pueda valer.

Este es el código que me pasaron que tendría que adaptar para hacer lo
que comento, es decir, que al salir de una celda de la columna código se
ejecute la función (el código estaba pensado para cuando se tiene sólo
la columna CODIGO con los códigos y que se recorra para poner las
DESCRIPCIONES pero como yo ya los tengos sería adaptarla para cuando se
ponga un código nuevo en una celda vacía de la columna):

public sub Recorre()
dim dbMiDB as DAO.Database, rsMiRS as DAO.Recordset,i as integer
Set dbMiDB = DBEngine.Workspaces(0).OpenDatabase([Aquí pon tu base de
datos con ruta completa])
Set rsMiRS=dbMiDB.OpenRecordset([Aqui pon tu origen de
datos],dbOpenSnapshot)
'Recorro la columna hasta que no haya datos. Inicializo los datos
i=1'Primera fila
do until cells(i,1)=""
rsMiRS.FindFirst "CODIGO=" & Cells(i,1)
if not rsMiRS.NoMatch then
cells(i,2)=rsMiRS.Fields("DESCRIPCION")
end if
i=i+1
loop
rsMiRS.close
set rsMiRS=nothing
dbMiDB.close
set dbMiDB=nothing
end sub

Repito que el código en parte me podría valer y lo adaptaría para hacer
lo que quiero, pero por ejemplo, como hacer para que al salir de una
celda se ejecute por ejemplo un MSGBOX en EXCEL?

Quisiera saber eso para entonces intentar lo que comento accediendo
desde EXCEL a la tabla del MDB.

Gracias de nuevo.

Principiante.

Respuesta Responder a este mensaje
#4 Principiante
04/03/2005 - 13:45 | Informe spam
Mil gracias de nuevo pues funciona perfecto. Sólo he tenido que
modificar esta línea pues el CODIGO que tengo en la tabla es de tipo texto:

rsMiRS.FindFirst "Codigo='" & Target & "'"

Gracias de nuevo y un saludo al grupo.

Principiante.

Fernando Arroyo escribió:
He modificado el código que pones para poder hacer algunas pruebas con una base de datos que tengo:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Then Exit Sub
Dim dbMiDB As DAO.Database, rsMiRS As DAO.Recordset
Set dbMiDB = DBEngine.Workspaces(0).OpenDatabase("C:\prueba.mdb")
Set rsMiRS = dbMiDB.OpenRecordset("Productos", dbOpenSnapshot)

rsMiRS.FindFirst "CódigoProducto=" & Target
If Not rsMiRS.NoMatch Then
Application.EnableEvents = False
Target.Offset(, 1) = rsMiRS.Fields("NombreProducto")
Application.EnableEvents = True
End If

rsMiRS.Close
Set rsMiRS = Nothing
dbMiDB.Close
Set dbMiDB = Nothing
End Sub

Tendrías que poner los nombres de tu base de datos, la tabla, los campos...

Si lo pegas en el módulo de la hoja (click derecho sobre su etiqueta->Ver código), cada vez que se modifique una celda de la columna A automáticamente se buscará el valor de la celda en la tabla de Access y, si se encuenta, se pondrá el contenido de otro campo (en este caso, NombreProducto) en la celda de la columna B de la fila que se acaba de modificar.
Un saludo.


Fernando Arroyo
MS MVP - Excel

"Principiante" escribió en el mensaje news:%

Gracias Fernando por la información.

Lo primero ha funcioando a las mil maravillas.

Voy a echar un vistazo a la página a ver si saco algo que me pueda valer.

Este es el código que me pasaron que tendría que adaptar para hacer lo
que comento, es decir, que al salir de una celda de la columna código se
ejecute la función (el código estaba pensado para cuando se tiene sólo
la columna CODIGO con los códigos y que se recorra para poner las
DESCRIPCIONES pero como yo ya los tengos sería adaptarla para cuando se
ponga un código nuevo en una celda vacía de la columna):

public sub Recorre()
dim dbMiDB as DAO.Database, rsMiRS as DAO.Recordset,i as integer
Set dbMiDB = DBEngine.Workspaces(0).OpenDatabase([Aquí pon tu base de
datos con ruta completa])
Set rsMiRS=dbMiDB.OpenRecordset([Aqui pon tu origen de
datos],dbOpenSnapshot)
'Recorro la columna hasta que no haya datos. Inicializo los datos
i=1'Primera fila
do until cells(i,1)=""
rsMiRS.FindFirst "CODIGO=" & Cells(i,1)
if not rsMiRS.NoMatch then
cells(i,2)=rsMiRS.Fields("DESCRIPCION")
end if
i=i+1
loop
rsMiRS.close
set rsMiRS=nothing
dbMiDB.close
set dbMiDB=nothing
end sub

Repito que el código en parte me podría valer y lo adaptaría para hacer
lo que quiero, pero por ejemplo, como hacer para que al salir de una
celda se ejecute por ejemplo un MSGBOX en EXCEL?

Quisiera saber eso para entonces intentar lo que comento accediendo
desde EXCEL a la tabla del MDB.

Gracias de nuevo.

Principiante.





Respuesta Responder a este mensaje
#5 Principiante
04/03/2005 - 14:08 | Informe spam
Abusando un poco :) he probado a usar CurrentProject.Path para que la
ruta no sea C:\ pero me da error al ejecutar el código (he añadido
la referencia de ACCESS). En ACCESS la utilizo para poder "colgar" los
archivos desde la MDB y no tener que llevar la ruta. No se puede en EXCEL?

Y otra cosilla, en principio tengo pensado que en esta hoja de EXCEL se
realicen todos los traspasos desde ACCESS, es decir, abro el libro, voy
a la hoja, borro las celdas, hago el traspaso y permito (gracias a tu
función) que puedan añadir algún producto mas pues sólo se trasapasan
aquellos artículos que cumplen una determinada condición.

En el caso de que quisiese crear por cada traspaso un archivo de EXCEL
distinto (esto se hacerlo), como se puede añadir esta función a una
hoja?. Pues al crear el archivo tendría que entrar y ponerle la función.
Se puede? Imaginemos que la función la tengo en un módulo de la MDB de
ACCESS por si se puede simplemente acceder desde la hoja EXCEL a esa
función por si es mas fácil.

estos son añadidos pues con lo anterior puedo "funcionar" :).

Bueno, gracias de nuevo.

Principiante.

Principiante escribió:
Mil gracias de nuevo pues funciona perfecto. Sólo he tenido que
modificar esta línea pues el CODIGO que tengo en la tabla es de tipo texto:

rsMiRS.FindFirst "Codigo='" & Target & "'"

Gracias de nuevo y un saludo al grupo.

Principiante.

Fernando Arroyo escribió:

He modificado el código que pones para poder hacer algunas pruebas con
una base de datos que tengo:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Then Exit Sub
Dim dbMiDB As DAO.Database, rsMiRS As DAO.Recordset
Set dbMiDB = DBEngine.Workspaces(0).OpenDatabase("C:\prueba.mdb")
Set rsMiRS = dbMiDB.OpenRecordset("Productos", dbOpenSnapshot)
rsMiRS.FindFirst "CódigoProducto=" & Target
If Not rsMiRS.NoMatch Then
Application.EnableEvents = False
Target.Offset(, 1) = rsMiRS.Fields("NombreProducto")
Application.EnableEvents = True
End If
rsMiRS.Close
Set rsMiRS = Nothing
dbMiDB.Close
Set dbMiDB = Nothing
End Sub

Tendrías que poner los nombres de tu base de datos, la tabla, los
campos...

Si lo pegas en el módulo de la hoja (click derecho sobre su
etiqueta->Ver código), cada vez que se modifique una celda de la
columna A automáticamente se buscará el valor de la celda en la tabla
de Access y, si se encuenta, se pondrá el contenido de otro campo (en
este caso, NombreProducto) en la celda de la columna B de la fila que
se acaba de modificar.
Un saludo.


Fernando Arroyo
MS MVP - Excel

"Principiante" escribió en el mensaje
news:%

Gracias Fernando por la información.

Lo primero ha funcioando a las mil maravillas.

Voy a echar un vistazo a la página a ver si saco algo que me pueda
valer.

Este es el código que me pasaron que tendría que adaptar para hacer
lo que comento, es decir, que al salir de una celda de la columna
código se ejecute la función (el código estaba pensado para cuando se
tiene sólo la columna CODIGO con los códigos y que se recorra para
poner las DESCRIPCIONES pero como yo ya los tengos sería adaptarla
para cuando se ponga un código nuevo en una celda vacía de la columna):

public sub Recorre()
dim dbMiDB as DAO.Database, rsMiRS as DAO.Recordset,i as integer
Set dbMiDB = DBEngine.Workspaces(0).OpenDatabase([Aquí pon tu
base de
datos con ruta completa])
Set rsMiRS=dbMiDB.OpenRecordset([Aqui pon tu origen de
datos],dbOpenSnapshot)
'Recorro la columna hasta que no haya datos. Inicializo los datos
i=1'Primera fila
do until cells(i,1)=""
rsMiRS.FindFirst "CODIGO=" & Cells(i,1)
if not rsMiRS.NoMatch then
cells(i,2)=rsMiRS.Fields("DESCRIPCION")
end if
i=i+1
loop
rsMiRS.close
set rsMiRS=nothing
dbMiDB.close
set dbMiDB=nothing
end sub

Repito que el código en parte me podría valer y lo adaptaría para
hacer lo que quiero, pero por ejemplo, como hacer para que al salir
de una celda se ejecute por ejemplo un MSGBOX en EXCEL?

Quisiera saber eso para entonces intentar lo que comento accediendo
desde EXCEL a la tabla del MDB.

Gracias de nuevo.

Principiante.





Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida