Access - Abrir formulario con macro

 
Vista:
sin imagen de perfil

Abrir formulario con macro

Publicado por Vic (7 intervenciones) el 25/09/2024 06:10:16
Saludos.
Estoy empezando con Access y agradecería mucho la siguiente ayuda que llevo intentando hacer y no consigo la manera de hacerlo utilizando una macro.
Tengo un formulario en forma de tabla de datos ( tiene dos claves: la principal ID_Asignatura y la secunddaria ID_Alumno; por lo que cada registro tiene claves consecutivas de la ID_Asignatura y una misma clave para ID_Alumno).
Lo que pretendo es que al pulsar en la celda donde aparece la clave ID_Asignatura; se abra ese mismo registro en modo vista formulario para añadir, ver, modificar o eliminar información más cómodamente que en la vista tabla de datos.
Siempre agradecido con vuestra ayuda.
Vic.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Abrir formulario con macro

Publicado por Anonimo (3397 intervenciones) el 25/09/2024 11:15:15
Me parece un entorno en el que se solucionaría el problema con un 'formulario dividido'.

Para lograr ese entorno con una Macro (abrir un formulario en un registro especifico) basta con añadir en el apartado 'CONDICION WHERE' la condición (que su campo xx sea igual al campo zzz del formulario que lo llama).

Con VBA seria mas sencillo, porque permite añadir la condición (el filtrar por un dato) directamente en la llamada de apertura y mas aún, se le puede indicar que se abra en modo Emergente (se abre en primer plano) y Modal (mientras no se cierre no se puede acceder a otro formulario) lo que impedirá dejar una modificación 'a medio hacer'.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Abrir formulario con macro

Publicado por Vic (7 intervenciones) el 25/09/2024 16:48:06
Hola amigo. Gracias por tu respuesta.
Lo que estuve intentando era igualar el campo ID del formulario de tabla de datos con el ID del formulario VistaAsignatura y se abre sólo con el primer registro.
Ejemplo:
Id_Asignatura Id_Alumno
1 3 Si pulso, se abre el formulario VistaAsignatura 1 - 3
2 3 Si pulso, se abre el formulario VistaAsignatura 1 - 3 (debería abrirse el formulario 2 - 3)
3 3 Id. (debería abrirse el formulario 3 - 3)

Espero haber sido preciso con la información.
Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Abrir formulario con macro

Publicado por Anonimo (3397 intervenciones) el 25/09/2024 19:33:32
Las Macros son como plantillas con acciones predefinidas y es complicado mostrarlas (excepto con una imagen).

Pero las macros se pueden 'convertir' a su equivalente en código (y esta conversion la convierte en una función), las funciones no son mas que texto y se pueden publicar sin mayor problema.

Convierte la actual macro a código (hay una opción en la barra de menu) y publica lo obtenido (un Copy&Paste), es el equivalente a una imagen, lo que permitirá conocer lo que has creado y dar las indicaciones para que se asemeje a lo que deseas/necesitas.

Tras ello tendrás 'lo mismo' en dos versiones y podrás decidir cual de ellas te da mas libertad..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Abrir formulario con macro

Publicado por Vic (7 intervenciones) el 26/09/2024 15:59:48
Hola amigo.
Muchas gracias por mantener tu interés en mi problema. Estuve mirando lo de convertir a código la macro y no he conseguido saber hacerlo; así que mando una foto de la macro. La macro como podéis ver es muy simple pero para mí todavía es un tema complicado.
Os pongo aquí las líneas de la macro:

AbrirFormulario
Nombre del formulario VistaAsignatura
Vista Formulario
Nombre del filtro
Condición WHERE= ="[Id_Alumno]=" & Nz([Id_Alumno];0)
Modo de datos
Modo de la ventana Normal

Gracias y saludos a todos!!
:)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Abrir formulario con macro

Publicado por Anonimo (3397 intervenciones) el 26/09/2024 22:20:22
En el apartado Condición WHERE no se precisa el signo de igualdad, solo el contexto (la condición).

.- Elimina el primer signo de igualdad
.- Las comillas no son necesarias
.- En las macros se asume que el campo es del formulario en que se ejecuta la macro (el que se abre) pero el otro dato referente ha de ser con la ruta absoluta (tiene que hacer referencia al otro dato que puede tener el mismo nombre pero esta en otra ubicación).

Por lo que la condición (la igualdad) tendría que ser algo similar a:
(como referencia, se utiliza lo que ha sido publicado)

Condición WHERE= [Id_Alumno]= FORMULARIOS![nombre del formulario]![Id_Alumno]

No se necesita la función NZ, se supone que el campo contiene un dato y se esta utilizando el mismo origen de datos en ambos formularios (se supone que ambos coinciden pues son el mismo)

Si una vez creada la macro se localiza la opción 'Convertir macros a Visual Basic' y se utiliza, se creará un nuevo objeto (en el apartado MODULOS) con un contenido similar a este:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Option Compare Database
Option Explicit
 
'------------------------------------------------------------
' Macro3
'
'------------------------------------------------------------
Function Macro3()
On Error GoTo Macro3_Err
 
    DoCmd.OpenForm "Procesadores", acNormal, "", "[descripcion]=[Forms]![Formulario1]![descripcion]", , acNormal
 
 
Macro3_Exit:
    Exit Function
 
Macro3_Err:
    MsgBox Error$
    Resume Macro3_Exit
 
End Function

De todo ello lo único interesante (que hace todo el trabajo) es esta línea:

1
 DoCmd.OpenForm "Procesadores", acNormal, "", "[descripcion]=[Forms]![Formulario1]![descripcion]", , acNormal
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Abrir formulario con macro

Publicado por Vic (7 intervenciones) el 28/09/2024 04:52:18
Hola amigo. Muchísimas gracias por tu tiempo. Intenté seguir tus pasos y probablemente algo no hice bien porque aunque lo hice de varias formas; no puedo dar con la clave. :( Se abre siempre el formulario Vista Asignatura desde cero sin estar asociado al registro que pulso.
He decidido enviaros el ejercicio de access que es muy simple por si podéis hacer algo.
(Estoy empezando a hacer mis pinitos con esto y se me hace difícil todavía; lo siento)
Feliz fin de semana
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Abrir formulario con macro

Publicado por Anonimo (3397 intervenciones) el 28/09/2024 11:30:20
Si me permites unas notas:

.- La base que has enviado no adjunta la macro (o sus intentos), no se puede juzgar el problema
.- El diseño no es correcto, se precisa una tabla que permita los enlaces entre alumnos y materias por curso lectivo

Se precisa una tabla mas, el curso lectivo, con la que se crean las relaciones multiples (todos con todos) por año lectivo.

Si intervienen mas detalles (por ejemplo 'Profesores') estos han de tener su propia tabla aparte (así como las asignaturas etc.)
Se repite lo anterior si se va a trabajar con mas de un centro, de ser único, el campo sobra

Tomando como referencia a lo publicado:
.- Duplica la tabla 'TablaAsignaturas'
.- Renombrar una a 'Año_Lectivo'


Tabla Alumnos::
.- ID alumno, Nombre, Apellido(s), Fecha de nacimiento, Sexo (si fuera el caso)
Tabla Asignaturas:
.- ID asignatura, Descripción y si acaso el Grado (datos dependientes del tipo de centro)
Tabla Año_Lectivo
.- Año_Lectivo, Id_Alumno, Id_Asignatura (Si hay tabla de profesorado, el ID_del docente)

Las relaciones entre tablas se generan mediante la tabla Año_Lectivo mediante los respectivos IDs
Si bien en sus respectivas tablas los IDs no admiten repeticiones, en la tabla Año_Lectivo si las admitirán.
Para evitar duplicados en Año_Lectivo, se genera un índice en la que el conjunto (Año_Lectivo + ID_Alumno + ID_Asignatura) sea único.

Este tipo de diseño permite que filtrando por alumno (en la tabla años lectivos) se obtengan las asignaturas por alumno año a año o globalmente, filtrado por materia los alumnos que las han seguido (también por año o globalmente) .... etc.

Un buen planteamiento al inicio (con la vista fija en el modelo final) es indispensable para lograr eficiencia.
Se ha de planificar teniendo en cuenta que puede haber mas de un enseñante por asignatura, que un enseñante puede dar mas de una asignatura e incluso que un enseñante puede limitarse a algunas especialidades, así mismo con los centros de enseñanza (si se lleva el control de mas de uno) porque es un dato irrelevante si el centro es único.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Abrir formulario con macro

Publicado por Vic (7 intervenciones) el 30/09/2024 05:05:11
Muchas gracias amigo. Voy a intentar poner en práctica lo que me has dicho (y si no te importa te comento de nuevo).
Lo del archivo no sé por qué no está la macro porque en mi archivo sí que la tengo.
Puse la macro que me dijiste en tu mensaje anterior.
Gracias y feliz semana amigo. :)
Victor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Abrir formulario con macro

Publicado por Anonimo (3397 intervenciones) el 01/10/2024 03:17:14
Abrimos la aplicación y no se ve una macro, posteriormente se descubre una macro incrustada en el evento ‘al hacer clik’ del campo [Id_Alumno], en la pestaña [Asignaturas] del formulario [Inicial]’.

Hay un conflicto con la condición y es que el campo se llama igual en ambos formularios y (la macro) no permite definir el dato referente (no deja hacer una referencia absoluta a si mismo).

Dada la relación existente entre las dos tablas -están relacionadas por el mismo campo ([Id_Alumno])- Access relaciona los formularios que están en las dos pestañas del formulario [Inicial] (cuyos orígenes de datos son las dos tablas).

Ello nos permite utilizar como referente al campo [Id_Alumno] de la pestaña [Alumno] y la condición queda así:

[Id_Alumno]= Formularios![Inicial]![Id_Alumno].

Al ejecutarse la MACRO ya se abre el formulario [VistaAsignatura] con los registros filtrados por el campo [ID_Alumno].

Si necesitas aclarar alguna duda que surja solo has de publicarla y se intentara resolverla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Abrir formulario con macro

Publicado por Vic (7 intervenciones) el 05/10/2024 03:33:46
Hola de nuevo.
Intenté poner en práctica tus sugerencias pero sigo sin dar con la clave. Probé a crear la tabla intermedia, he probado a cambiar el nombre de la clave secundaria de [Id_Alumno] por [Alumno] para evitar la duplicidad del campo y tampoco.
Adjunto el archivo nuevamente (esta vez con la macro incluída :)

El caso es que se abre el formulaio [VistaAsignatura] pero sólo filtra el primer registro de cada alumno. El resto de los registros no los filtra.
Feliz fin de semana
:)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Abrir formulario con macro

Publicado por Anonimo (3397 intervenciones) el 05/10/2024 05:38:37
Con el diseño actual, no veo mucho futuro, solo puede ser interesante para hacer prácticas y de ellas obtener experiencia (se obtiene experiencia de las que funcionan y también de las que no funcionan).

Supuse que se apreciaría que localice la macro en 'Practica3', (pero no en la sección de Macros) estaba directamente en el objeto (y por ello se las denomina 'macros incrustadas).

En 'Practica3' si editas la 'macro incrustada' y copias fielmente la condición que publique, apreciaras que hace lo que se le indica:
.- Se abre el formulario y en el solo aparecen los registros asociados al alumno que se recibe click.

La duda que me queda es: ¿Que se pretende obtener? ....

Lo que se suele hacer en entornos como el planteado, es asignar materias a alumnos, las materias (como elemento común) no tienen asignado alumnos porque hacerlo así implica duplicar el registro por cada alumno que curse esa materia.

Si aun así se desea continuar con el actual diseño creo que se enfoca mal la solución.

Con el actual diseño solo se podrá modificar registros que ya estén asociados al alumno, y como se filtra por alumno (no por materia) siempre abrirá en su primer registro.

Si filtrase por materia aparecería solo el registro de esa particular materia (y con el diseño actual: asociado al alumno seleccionado en la pestaña 'Alumno').

Nota: La macro incrustada y la macro 'con nombre' son lo mismo, solo que la que tiene nombre se puede utilizar en mas de una ubicación y la incrustada solo en el objeto.
Las macros 'normales' se pueden convertir a VBA, las incrustadas no tienen esa opción (las tendría que asignar al evento dependiente y ello no esta contemplado por diseño.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Abrir formulario con macro

Publicado por Vic (7 intervenciones) el 18/10/2024 09:34:57
Hola de nuevo.
Sin ninguna duda tiene mucho sentido todo lo que comentas. Con mi ejemplo, en realidad, no persigo hacer ninguna base de datos completa y avanzada ya que eso está muy lejos de mis posibilidades. Actualmente estoy haciendo mis pinitos y voy cogiendo ideas de un sitio, de otro, ... y llegado el caso, pues aplicar lo que voy aprendiendo para crear mis propias bases de datos de manera simple, sencilla pero siendo operativas; ya sabes: mi bilioteca, mis compras, mis inventarios, mi contabilidad, etc...
Respecto a lo que pretendo obtener, quería hacer lo siguiente: En el formulario las asignaturas de cada alumno se muestran en una tabla de datos; así pues, sería interesante que haciendo uso de la macro necesaria, se abriera un nuevo formulario con esa asignatura y ese alumno con la finalidad de modificar datos de la asignatura y/o añadir nuevas asignaturas. Francamente, creía que sería fácil haciendo uso de una macro sencilla; pero ya veo que no.
Bueno, en cualquier caso millones de gracias. Feliz fin de semna!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar