Como usar en Access y VBA el comando DoCmd.OpenForm para abrir un formulario

Voy a intentar quitaros el miedo a usar código VBA en vuestros proyectos en Access para que veáis que no es tan fiero el lobo como lo pintan.

Hablemos del comando “OpenForm” que utilizamos para abrir un formulario. La forma más sencilla de usarlo es:

DoCmd.OpenForm “NombreDelFormulario”

Y ya está, con esta orden abrimos el formulario que pongamos entre las comillas. La mayoría de las veces nos bastará con esta configuración. En el resto del artículo se dará la información sobre otros parámetros opcionales que podremos utilizar si los necesitáramos.

Pongámoslo en contexto. Tenemos un formulario principal de nuestra aplicación que debe de abrirnos el resto de formularios del programa.

Microsoft Access - Usando OpenForm

Automáticamente se nos abre el editor de VBA con el cursor en el sitio adecuado para escribir nuestra sentencia:

Microsoft Access - OpenForm

 

Nota: Como se puede observar, una cosa que nos ayuda enormemente a la hora de escribir código es la ayuda en pantalla. En este caso tras escribir “Docmd.OpenForm” y poner un espacio, Access nos presenta un letrero amarillo informando sobre como configurar el “OpenForm” y lo mejor de todo es que, en negrita, nos va marcando en qué posición de la sentencia nos encontramos.

Es cierto que, cuando empezamos, esta ayuda más que solucionarnos un problema no puede complicar por la forma de expresarse pero con el tiempo es fácil interpretarla y se convierte en un recurso insustituible.

Sigamos desglosando la sentencia, tras poner el nombre del formulario que queremos abrir, OpenForm tiene algunos parámetros opcionales separados por “,” que podemos cumplimentar para potenciar la apertura del formulario. Veamos los más importantes.

View

Si no lo configuramos, por defecto, está en “acNormal” que es como se abren normalmente  los formularios. Aunque este parámetro yo no suelo usarlo vamos a comentarlo para ilustrar la ayuda en pantalla.

Decíamos que tras poner el nombre del formulario que queremos abrir, entre comillas, ponemos la primera coma “,” y automáticamente aparecerá un desplegable con las distintas opciones de “View” para que seleccionemos una, si queremos.

Microsoft Access - OpenForm

 

Según la ayuda de Access, cada una de ellas, hacen lo siguiente:

  • acDesign: El formulario se abre en la vista Diseño.
  • acFormDS : El formulario se abre en la vista Hoja de datos.
  • acFormPivotChart: El formulario se abre en la vista Gráfico dinámico.
  • acFormPivotTable: El formulario se abre en la vista Tabla dinámica.
  • acLayout: El formulario se abre en la vista Presentación.
  • acNormal:  (Valor predeterminado) El formulario se abre en la vista Formulario.
  • acPreview: El formulario se abre en la Vista preliminar.

En nuestro caso no tenemos la necesidad de configurar este parámetro, así que la configuración predeterminada (acNormal) nos vale. ¿Cómo lo ignoramos? Simplemente poniendo otra coma “,” por lo que el código pasará al siguiente parámetro.

Filter Name

Este parámetro tampoco es muy común utilizarlo pero ahí está. Permite asignar, entre comillas “”, el nombre de una consulta que tengamos guardada en Access y que filtre los datos del formulario.

Por ejemplo, tenemos el formulario “F_Clientes” que toma los datos de la tabla “T_Clientes” donde están todos los clientes del sistema. Supongamos que tenemos un botón en nuestro formulario que ponga “Clientes España” y otro que ponga “Clientes EEUU”.  La finalidad sería que al pulsar cualquiera de ellos abriese el mismo formulario de Clientes pero filtrando por los datos solicitados.

Podemos tener las consultas guardadas que filtren esos datos y especificar en este parámetro cuál de ellas utilizar. Nuestro formulario se abrirá filtrado según la consulta.

Microsoft Access - OpenForm

La consulta puede ser algo así:

Microsoft Access - OpenForm

Y la sentencia para nuestro botón “Clientes España” quedaría así:

DoCmd.OpenForm “F_Clientes”,,”C_Clientes_España”

De esta manera pulsando el botón “Clientes España” le estaríamos dando la orden para que al abrir el formulario solo mostrase los clientes de España tal y como filtra la consulta. Como puedes observar podemos tener un solo formulario y abrirlo desde distintos botones con distintas configuraciones.

Pero no es el objetivo de este artículo configurar este parámetro pues lo empezamos con el botón de “Clientes” que los muestra todos así que, como en caso anterior, pondremos otra coma “,” dejando el parámetro sin configurar.

WhereCondition

Vamos al siguiente parámetro. Este es similar al anterior y su funcionalidad es la misma solo que vista desde un enfoque distinto.

Para el usuario novel de Access es más sencillo configurar una consulta para filtrar un formulario pero para el usuario avanzado puede resultar más práctico escribir la consulta directamente desde el código.

Te recomiendo que veas nuestros artículos sobre filtros pues la forma de construirlos se puede utilizar en este parámetro.

Sin intención de explayarnos en cómo construir los filtros a continuación muestro como quedaría la línea si quisiéramos implementar lo mismo que en el ejemplo anterior usando este parámetro:

Microsoft Access - OpenForm

Pero, al igual que en caso anterior, no es la finalidad de nuestro botón de “Clientes” por tanto también ignoramos este parámetro poniendo otra coma “,”

DataMode

Este si que es interesante pues nos permite configurar como se comportará respecto a los datos.

Por ejemplo podemos abrir el formulario directamente en un registro nuevo para empezar a introducir datos “acFormAdd” o incluso podemos abrirlo en modo solo lectura para que no se puedan modificar los datos “acFormReadOnly”.

Estas son las distintas opciones para este parámetro:

  • acFormAdd: El usuario puede agregar registros nuevos pero no puede modificar los existentes.
  • acFormEdit: El usuario puede modificar los registros existentes y agregar registros nuevos.
  • acFormPropertySettings: El usuario sólo puede cambiar las propiedades del formulario.
  • acFormReadOnly: El usuario sólo puede ver registros.

En nuestro ejemplo y, porque me he levantado con el pie torcido, voy a configurar el botón para que abra el formulario en solo lectura y que el usuario no me pueda modificar los datos.

DoCmd.OpenForm «F_Clientes», , , , acFormReadOnly

Microsoft Access - OpenForm

WindowsMode

Este parámetro también puede convertirse en un buen aliado. Permite configurar como queremos que se abra el formulario:

  • acDialog: Permite abrir el formulario de forma que no se podrá hacer otra cosa, ni seleccionar ningún otro formulario hasta que este no se cierre. Muy útil para formularios tipo diálogo donde haya que pulsar un botón para decidir una acción.
  • acHidden: El formulario se oculta. ¿Para qué quiero abrir un formulario oculto? No tiene mucho sentido ¿Verdad? Esto puede ser útil cuando queremos ejecutar una acción cada cierto tiempo. Los formularios tienen un evento “Al cronómetro” que permiten ejecutar una acción según el tiempo especificado y para ello que mejor que tener el formulario abierto pero que no se muestre en pantalla.
  • acIcon: El formulario o informe se abre minimizado en la barra de tareas de Windows.
  • acWindowNormal: (Valor predeterminado) El formulario o informe se abre en el modo establecido por sus propiedades.

Como siempre animo al lector a probar las distintas opciones que no vamos a quemar el ordenador con ello.

En nuestro ejemplo lo vamos a configurar en modo “acDialog” porque no quiero que el usuario haga otra cosa hasta que cierre el de clientes.

Microsoft Access - OpenForm

Y nos queda el último parámetro.

OpenArgs

Y llegamos a nuestro último parámetro opcional. Este parámetro permite enviarle un dato al formulario que estamos abriendo y que luego, desde este, podemos leer para actuar en consecuencia.

Este parámetro lo he usado en infinidad de casos, es utilísimo y, una vez que el lector descubre cómo utilizarlo se le pueden ocurrir tantos usos como imaginación tenga.

Por poner uno de tantos ejemplos y que sea simple, imaginemos que en el menú principal hemos guardado el nombre del usuario que ha abierto la aplicación y queremos pasarle ese nombre al formulario que estamos abriendo para que este lo ponga en una etiqueta informando del usuario que lo tiene abierto.

El parámetro podría quedar así:

Microsoft Access - OpenForm

Aunque no sea objeto de este artículo explicar cómo se captura en el formulario que estamos abriendo el “OpenArgs” pondremos a modo de ejemplo como sería y dejamos para el artículo «Domina la propiedad OpenArgs en Access»  una explicación completa sobre las utilidades del mismo y ejemplos de como aplicarlo.

Desde el formulario Clientes, en su evento “Al abrir”:

Private Sub Form_Open(Cancel As Integer)

If Not IsNull(Me.OpenArgs) Then

Me.lblUsuario.Caption = Me.OpenArgs

End If

End Sub

De esta forma, si el formulario hubiese recibido un parámetro al abrirse, lo usaríamos para asignarlo a la etiqueta “lblUsuario”

Y con esto queda cubierto el comando OpenForm. Si quieres también puedes indagar sobre el OpenReport que utilizamos para abrir un informe y que comparte muchísimas de las opciones con OpenForm.

19 comentarios

  1. Hola. Muy interesante el artículo. Espero con impaciencia la explicación sobre el parámetro OpenArg y sus utilidades y ejemplos.

    Muy buena labor la de esta web y muy bien trabajada.

    Gracias.

  2. Hola, gracias por compartir tus conocimientos,, he probado la opción de abrir el form, en modo Add, y aun asi me permite editar, hay alguna forma especial de escribir el codigo para limitar en este caso la edicion de registros.

    Gracias de nuevo

    1. Es que es esa su finalidad. A ver, cuando abres un formulario con el parámetro Add le estás diciendo que te prepare un registro en blando para poder rellenarlo. En ningún momento te bloquea los datos, ni del registro activo ni de cualquier otro que puedas tener en el formulario.
      Si lo que quieres es evitar la edición de registros hay varias formas de hacerlo, la más genérica es ir a las propiedades del formulario, pestaña Datos, parámetro «Permitir Edición» y ponerlo en «NO»

  3. Estoy buscando la forma de enlazar una Base de Datos de Access a través de vba Excel 2013, he visto varios tutoriales pero estos están basados en Excel 2007 y 2010 pero en los ejemplos que he visto no funcionan ya que en el office 2013 ya no están disponibles.

    agradezco de antemano tu ayuda.

  4. GRACIAS POR LA INFORMACION ES MUY UTIL, pero mi problema es que cuando llamo a un formulario y cliqueo en el boton buscar me sale este mensaje «la accion o comando buscar no esta disponible ahora».

    pero cuando abro el formulario directamente el boton funciona.

    a alguien le paso lo mismo.

  5. Gracias, buen aporte!

    ¿cómo haría si quiere que se abra el formulario con el registro que seleccione?

  6. Tema muy bien abordado muchas felicitaciones y muchas gracias por el aporte seguro que me ayudará mucho como programador autodidacta…..

Responder a Juan Carlos Chávez P. Cancelar respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.