Hola
Tengo un problema con un código que debe ejecutarse al abrir un formulario.
La situación se da entre dos formularios. Tengo uno que se llama "Mis Tareas" y otro que se llama "Tareas".
En el primero se filtran las tareas que hay que hacer por persona y por una serie de criterios, como fecha de inicio anterior o posterior a unas dadas, etc. Es decir, tengo una serie de cuadros combinados y cuadros de texto que filtran lo que aparece en un listbox al lado.
Quiero que cuando se hace doble click en la tarea que quieras seleccionar en el listbox, se abra el formulario "Tareas".
Hasta aquí, ningún problema.
El formulario "Tareas" tiene una serie de cuadros de texto y cuadros combinados en los que aparecen (y se pueden editar) los datos del registro correspondiente a la tarea seleccionada.
Este formulario lo utilizo para introducir los datos de tareas nuevas o para modificar los de las existentes. Incluye datos como Nombre de la tarea, Responsable de la tarea, Cliente, Fecha objetivo, Fecha de cumplimiento, etc.
Lo que necesito es que cuando se abra el formulario para editar, aparezca donde sea. Pero cuando lo abro desde el formulario "Mis Tareas" tiene que localizar el registro de la tarea correspondiente (sobre la que se hizo doble click) y presentarlo.
He escrito un código que funciona la primera vez, pero cuando toca cerrar el formulario y volverlo a abrir ya no funciona.
Lo que hago es lo siguiente:
En el formulario "Mis Tareas" introduzco el código siguiente:
Private Sub Lista16_DblClick(Cancel As Integer)
Form_Tareas.Tag = Lista16.Value
DoCmd.OpenForm "Tareas", acNormal, , , acFormEdit, acWindowNormal
End Sub
cuando abres un formulario con DoCmd.OpenForm puedes indicar qué registro quieres mostrar
fíjate en ese argumento que se llama WhereCondition
DoCmd.OpenForm "Tareas", acNormal, , "Id=" & Lista16.Value, acFormEdit, acWindowNormal
También es interesante, si quieres pasar argumentos al formulario de destino, el último argumento, ese que se llama OpenArgs, con él puedes pasar un texto con lo que tú quieras, que luego puedas manipular en el código del formulario.
------
Ya sé Excel, pero necesito más.
por cierto, ¿por qué tienes que cerrar las tablas? ¿qué hacen abiertas?
------
Ya sé Excel, pero necesito más.
Muchas gracias
He estado trasteando con OpenArgs, y me funciona igual que cuando uso una variable global y cuando uso la propiedad Tag. Es decir, no funciona.
No había utilizado el parámetro WhereCondition porque eso me filtra la tabla (a modo de consulta), pero yo lo único que quiero es que se desplace al registro correspondiente. En cualquier caso, a unas malas, es una opción.
En cuanto a las tablas, es que no sé cómo hacer que los formularios se ejecuten sin que se abra el entorno de Access. Entonces se me abre de fondo el Access, y según abro y cierro las tablas se ven de fondo. Prefiero que no se vean más de lo imprescindible en mi versión beta de esto, para evitar tentaciones de meter datos a pedal.
Saludos
Por cierto, he probado lo que me dices, y como solución a mi problema me sirve. Aunque, como te he comentado en el punto anterior, no es exactamente lo que yo buscaba.
Sin embargo, respecto a mi código para cerrar el formulario (cierro tablas y luego cierro el formulario) me ocurre que tengo que darle dos veces.
Es decir, con el formulario abierto pincho en el botón de volver y ejecuta el código. El resultado es que se cierran las tablas, pero no el formulario. Si vuelvo a pinchar en el botón, entonces sí que se cierra el formulario.
¿Por qué puede ser?
Saludos
En las opciones de la base de datos puedes decirle que muestre un formulario al inciar la aplicación. (está en opciones>base de datos actual)
Puedes decirle también que oculte el panel de navegación, donde aparecen las tablas y demás cosas de access.
(para mostrarlos de nuevo basta con que pulses F11)
------
Ya sé Excel, pero necesito más.
Con esas opciones sigo viendo el entorno de Access.
Es cierto que se presentan menos cosas, pero no funciona como si fuera una aplicación independiente (lo he visto en algunas bases de datos, pero no lo sé hacer)
Saludos
dos cosas que me extrañan:
1- Estableces el valor de Form_tareas.tag antes de abrir el formulario. cuando el formulario se abre ¿qué valor le llega?
2- Cuando cierras el formulario guardas cambios ¿es que has cambiado el diseño del formulario?
DoCmd.Close acForm, "Tareas", acSaveYes
¿y si no guardas cambios en el formulario al cerrarlo? quita acsaveyes
sigo sin entender por qué están las tablas abiertas
------
Ya sé Excel, pero necesito más.
Puedes desactivar los menús, puedes quitar opciones, pero siempre se podrá recuperar, porque lo estás abriendo con access
Puedes crear un archivo mediocompilado accde, pero tampoco es un ejecutable propiamente dicho
Lo más parecido a un ejecutable, para que se pueda abrir incluso en equipos sin licencia de access, es utilizar el runtime de access, es como el motor de access.
busca algo llamado Access Developer Extensions:
http://answers.microsoft.com/en-us/office/forum/office_2010-access/access-developer-extension-for-2010-version/ff040234-bf30-42b3-9e2f-0cc675088a25
en la versión 2007 tienes que descargarlo aparte (http://www.microsoft.com/en-us/download/details.aspx?id=24569)
en la versión 2010 viene en el paquete de instalación, aunque no se instala por defecto.
------
Ya sé Excel, pero necesito más.
Las tablas las tenía que abrir porque si no me da error al manipularlas.
Sin duda es porque estoy haciendo algo mal...
Saludos
Pero la manipulación entiendo que es de los datos que hay almacenados en la tabla, no de la tabla en sí, es decir, que imagino que no modificas el diseño de la tabla, no añades campos nuevos ni creas índices nuevos, ..., simplemente editas datos existentes o añades datos nuevos ¿no?
Para editar los datos no necesitas que la tabla esté abierta, esa es la idea del formulario, editar los datos que están guardados en una tabla.
------
Ya sé Excel, pero necesito más.
La aplicación la tengo que presentar hoy o mañana. De momento irá así. Pero como sin duda tendré que ir ampliándola o corrigiendo errores, en una segunda versión revisaré esto sin falta.
Muchas gracias