Acceso a macros y módulos en Access97

¿Existe alguna forma de acceder a través de VBA al contenido de las macros y módulos (incluidos los módulos asociados a Formularios e Informes)?
Es decir, lo que me interesaría es acceder a las acciones contenidas en la macro y/o al código VBA contenido en los módulos. Yo no he encontrado cómo hacerlo, se como acceder a la estructura de las tablas, al código SQL asociado a cualquier consulta y a los controles de los formulariose Informes pero no he podido acceder a las macros ni al código de los módulos.
2

2 Respuestas

6.375 pts.
En principio no se exactamente que es lo que quieres hacer, si quieres acceder desde visual basic o programas parecido no creo que puedas vincularte a una macro o modulo de access.
Si estas trabajando en access y no te deja ver ni los informes ni las macros ni los módulos es por que tu tienes un archivo de access con extensión *.mde en vez de los *.mdb tu fíjate en eso por que en el caso de que tu base de datos sea un *.mde es un tipo de archivo de access que lo que te hace es bloquear el código y módulos... para darle algo de seguridad para que no la copien y no tienes opción de ver lo que intentas tu.
Fíjate en eso y ya me contaras
3.150 pts.
Antes te di una respuesta parcial y por problemas con mi pc no pude terminarla.
Como no se si te llego o no, vuelvo a comenzar.
Creo que lo que tu deseas saber es cual es el código de VB implícito en una macro, ¿verdad?
Es muy fácil, selecciona la macro deseada (sin abrirla), y haz click en HERRAMIENTAS-MACROS. Convertir macros a vb.
Esto te generará un módulo que se llamará "Macro convertida--Nombre de macro".
De esta forma podrás acceder sin problemar al código de una macro.
Esto te será muy útil para aprender a programar determinadas acciones, para saber cual es la función que se usa para determinadas acciones.
Creo que un ejemplo sera muy ghrafico. Imaginate que quieres hacer que al pulsar un botón, te aparezca un mensaje, por ejemplo "hola":
CON MACROS: seleccionaras CuadroMsj
CON MODULOS (CODIGO VB): MsgBox "hola"
Con respecto a tu otra duda, no se si te he entendido bien, si quieres acceder al contenido de un modulo, simplemente seleccionalo y pulsa sobre diseño.
Espero haberte podido ayudar, si tienes alguna otra duda, o deseas más información, ya sabes donde estoy.
Hasta entonces me despido.
Hola etrigan, en primer lugar quiero agradecer el interés mostrado pero creo que no expresé bien lo que quiero hacer.
Lo que intento hacer es una utilidad que me permita efectuar búsquedas en los programas desarrollados en Access, te lo explico con un ejemplo :
Imagina que tienes una consulta que se llama, por ejemplo, "CONSULTA" y quieres saber dónde se está utilizando en una base de datos. Las posibilidades de uso de esa consulta son :
1) Puedes utilizar CONSULTA en otra consulta (como si se tratase de una tabla). Este caso se localizarlo recorriendo mediante VBA el objeto Querydefs, para cada query se accede a la propiedad SQL y con la instrucción Instr puedo localizar si en ese código SQL aparece la cadena CONSULTA, esto indica que se utiliza CONSULTA como entrada para esa query.
2) Puedes utilizar CONSULTA en una Macro, esto no se como comprobarlo mediante VBA, la única forma de hacerlo que he encontrado es revisando una a una todas las macros; es decir, entrando al modo diseño e inspeccionando si existe alguna acción AbrirConsulta sobre CONSULTA.
3) Puedes utilizar CONSULTA a través de VBA como si se tratase de una tabla (en cualquier Módulo) abriéndola mediante el método OpenRecordSet, esto tampoco se como comprobarlo de forma automática salvo abriendo cualquier módulo y ejecutando el comando Buscar extendiéndolo a todo el proyecto.
Son los casos 2 y 3 los que me interesan, sobre todo el 2 que es el más "pesado" de todos puesto que obliga a revisar visualmente todas las macros.
En fin, espero haber definido mejor ahora lo que quiero.
Saludos.
Es cierto, no había pillao nada 8-))...
Haber si ahora si te puedo ayudar.
Para saberlo a través de VB, es fácil, solo tienes que comprobar en la colección QUERYDEFS si existe la que buscas, y si es así, actuar en consecuencia.
Aquí te pongo un ejemplillo, pa que lo veas lo más claro posible:
Este ejemplo comprueba si existe en una base determinada una consulta llamada "CONSULTA" y en caso de que exista, la elimina de la base de datos.
Sub buscar()
Dim dbs As Database, qdf As QueryDef
Dim strSQL As String
' Devuelve la referencia a la base de datos activa.
Set dbs = CurrentDb
' Actualiza la colección QueryDefs.
dbs.QueryDefs.Refresh
' Si existe la consulta ContratosRecientes, la elimina.
For Each qdf in dbs.QueryDefs
If qdf.Name = "Consulta" Then
dbs.QueryDefs.Delete qdf.Name
End If
Next qdf
Como ves es un proceso bastante fácil.
Otra cosa es mirar las macros, siento decirte que yo tampocohe encontrado información al respecto (AUN). Actualmente, y a raíz de tu pregunta, estoy chequeando las posibilidades de la propiedad CONTAINERS, que es el que gestiona los módulos, con lo que debe existir algo similar para las macros. Cuando de con la solución del problema, te lo haré saber (escríbeme un mensaje con tu e-mail y yo me pondré en contacto contigo,¿ok?).
Lamento mucho haberte contestado solo a medias, tratare de solucionarlo en breve.
Otro cordial saludo,
Etrigan
P.D. Si tu descubres la forma de hacerlo antes, házmelo saber, de esta forma podre ayudar a otros con problemas parecidos. Ademas, el saber no ocupa lugar 8-))
Ok etrigan, la gestión de las querydefs ya la conocía y la sabia utilizar pero de todos modos es de agradecer el interés mostrado.
Si encuentras cómo hacerlo puedes enviarme un mensaje a [email protected]
NOTA : No me dices a qué e-mail comunicarte la solución ¡ Si la encuentro !.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas