A veces, tenemos tareas recurrentes que nos gustaría simplificar y cuando esas tareas implican la interacción con el modelo de objetos en Access, ciertamente no querrá perderse el Intellisense incorporado.

¿Tienes algún Intellisense?

En IT Impact, abrimos formularios usando frecuentemente la clausula WHERE, y para asegurarnos que el formulario abrió correctamente, cerramos el formulario si está abierto para abrirlo de nuevo. Nosotros creamos un simple procedimiento llamado OpenMyForm usando una cadena string regular para la condición WHERE.

Public Sub OpenMyForm(FormName As String, WhereCondition As String)
  If CurrentProject.AllForms(FormName).IsLoaded Then
    DoCmd.Close acForm, FormName
  End If
  DoCmd.OpenForm FormName, WhereCondition:=WhereCondition
End Sub

Este código trabaja perfecto para nosotros. Ahora, supongamos que queremos que nuestro formulario pueda soportar abrir en vista de formulario o en hoja de datos. Una de la soluciones sería que agreguemos otro parámetro:

Public Sub OpenMyForm( _
  FormName As String, _
  WhereCondition As String, _
  OpenAsDatasheet As Boolean _
)
  If CurrentProject.AllForms(FormName).IsLoaded Then
    DoCmd.Close acForm, FormName
  End If
  If OpenAsDatasheet Then
    DoCmd.OpenForm FormName, _
                   WhereCondition:=WhereCondition, _
                   View:=acFormDS
  Else
    DoCmd.OpenForm FormName, _
                   WhereCondition:=WhereCondition, _
                   View:=acNormal
  End If
End Sub

No queremos continuar agregando más líneas de códigos de esta manera, así que podemos modificar OpenMyForm para utilizar las enumeraciones nativas de Access AcFormView, AcFormOpenDataMode y  AcWindowMode:

Public Sub OpenMyForm ( _
  FormName As Variant, _
  Optional View As AcFormView = acNormal, _
  Optional FilterName As Variant, _
  Optional WhereCondition As Variant, _
  Optional DataMode As AcFormOpenDataMode = acFormPropertySettings, _
  Optional WindowMode As AcWindowMode = acWindowNormal, _
  Optional OpenArgs As Variant _
)
  If CurrentProject.AllForms(FormName).IsLoaded Then
    DoCmd.Close acForm, FormName
  End If
  DoCmd.OpenForm FormName, _
                 View, _
                 FilterName, _
                 WhereCondition, _
                 DataMode, _
                 WindowMode, _
                 OpenArgs
End Sub

Si usted utiliza el buscador de objetos (F2) y busca DoCmd OpenForm, podrá ver que los parámetros son exactamente iguales (los parámetros que son opcionales, tienen un tipo de dato Variant. Por defecto).

Debido a que los parámetros se definen usando los tipos de datos iguales (tenga en cuenta que las enumeraciones son una forma de tipos de dato), nombrados con el mismo nombre, tienen los mismos valores por defecto y todas las variantes posibles de DoCmd.OpenForm, use comas para omitir algunos argumentos opcionales, usando parámetros nombrados, trabajarán con el nuevo OpenMyForm sin ningún cambio, excepto el hecho de que hemos garantizado que el filtrado será el actual.

Para averiguar cuáles enumeraciones están incorporadas a Access y DAO. Es muy simple con el uso del buscador de objetos en el editor de VBA (presione F2 para abrirlo) y mirando Access y/o las bibliotecas DAO para ver cómo se denominan las enumeraciones. Si también observa el Intellisense que muestra cuando se escribe en DoCmd.OpenForm, también le dirá el tipo de dato, incluyendo el nombre de las enumeraciones que utiliza para que pueda usarlo y conseguir las enumeraciones correctas para luego ir y volver a utilizarlo en su propio código. Por supuesto, usted no está limitado a sólo Access y/o enumeraciones DAO.

¿Cuáles otros usos de las enumeraciones incorporadas se pueden utilizar? ¡Háganoslo saber en los comentarios!