La página Web de Emilio Sancha - MVP 2006/11
La página Web de Emilio Sancha

Inicio    |   Access    |   Excel    |    Visual Script    |   Enlaces    |   Búsquedas    |   Apuntes    |   Libro de Visitas

Suscripcion RSS

Uso de UserForms en Access (o en cualquier aplicación de Office)

 

Los UserForms son unos grandes desconocidos en Access, mientras que en el resto de aplicaciones de Office son el único modo de usar formularios, en Access estamos acostumbrados a usar los propios y no solemos acordarnos de ellos. De hecho son los contenedores nativos de los controles "Microsoft Forms 2.0" que en ocasiones utilizamos en nuestros formularios. Asi pués, no está de mas recordar de vez en cuando que están ahí y que podemos sacarles partido.

Generalmente en Access no suele estar activada la opción de crear UserForms, esta debería aparecer en la ventana de VBA, en el mismo desplegable en que seleccionamos crear un módulo estándar, uno de clase o un procedimiento, también en el menú Insertar.

En el caso de que no apareciera podremos insertarlo del mismo modo que podemos hacer con otros botones del menú, pulsamos el botón derecho del ratón en un espacio vacío de la barra de herramientas

Pulsamos Personalizar y vamos a Insertar

Seleccionamos UserForm y lo arrastramos al desplegable comentado y/o a otra posición de alguna barra de herramientas como por ejemplo el menú Insertar, cerramos el cuadro de dialogo Personalizar y ya podemos empezar a utilizar los UserForms.

Como decía antes los UserForms aparecen en la ventana de VBA y se manipulan allí mismo, de hecho no serán "visibles" en la ventana de la base de datos.

En Modo Diseño tenemos dos posibles vistas de un UserForm, la vista "Código" y la vista "Objeto" y podemos alternar entre ellas pulsando F7 o mediante los iconos de la barra que aparece en la ventana del explorador de proyectos al tener activo un UserForm.

Vista Código

Vista Objeto

Desde la vista Objeto se puede añadir cualquiera de los controles deseados seleccionándolo en el Cuadro de herramientas, que además es personalizable y al que se pueden añadir múltiples controles ActiveX.

Dicho esto y como ejemplo vamos a hacer una prueba con un cuadro de lista y a comprobar que puede resultarnos muy útil, comentar por otra parte, que ese mismo cuadro de lista se puede insertar en un formulario estándar de Access como Control ActiveX, seleccionando Microsoft Forms 2.0 Listbox.

Los UserForms al contrario que los formularios de Access y como los de VB Clásico no se pueden enlazar a datos de una tabla, curiosamente si se puede hacer a un rango de celdas en Excel, para cargar los datos podemos utilizar AddItem y RemoveItem para eliminarlos.

Lo haremos en el evento al inicializar el UserForm, por ejemplo:

Private Sub UserForm_Initialize()
Dim rst As DAO.Recordset, _
    strSQL As String
 
On Error GoTo UserForm_Initialize_TratamientoErrores
 
strSQL = "SELECT NombreCompañía FROM Clientes"
 
Set rst = DBEngine(0)(0).OpenRecordset(strSQL, dbOpenSnapshot, dbReadOnly)
 
If Not (rst.BOF And rst.EOF) Then
   Do
      Me.ListBox0.AddItem rst!NombreCompañía
      rst.MoveNext
   Loop Until rst.EOF
End If
 
UserForm_Initialize_Salir:
   On Error Resume Next
   If Not rst Is Nothing Then
      rst.Close
      Set rst = Nothing
   End If
   On Error GoTo 0
   Exit Sub
 
UserForm_Initialize_TratamientoErrores:
   MsgBox "Error " & Err & " en proc.: UserForm_Initialize del Formulario: " & Application.VBE.ActiveCodePane.CodeModule.Name & " (" &  Err.Description & ")", vbCritical + vbOKOnly, DBEngine(0)(0).Properties("AppTitle")
   Resume UserForm_Initialize_Salir
 
End Sub        ' UserForm_Initialize

Así, una vez cargado el UserForm, lo que por cierto podremos hacer mediante su método Show, veremos el cuadro de lista cargado con los datos de la tabla, lo mismo que ocurre con el cuadro de lista estándar de Access.

De momento todo parecen desventajas, ¿dónde está entonces la ventaja sobre el de Access?, pues en que podemos hacer que aparezcan casillas de verificación o botones de opción.

Solo tenemos que jugar con las propiedades ListStyle y MultiSelect la primera nos permite seleccionar entre Plain: normal y Option: botones de radio o casillas de verificación, será la propiedad MultiSelect la que decida que tipo de selector de registro veamos, si seleccionamos Single: un único registro seleccionado, veremos botones de opción, si por el contrario seleccionamos Multi o Extended, veremos casillas de verificación.

Como el cuadro de lista está desconectado de la tabla habrá que montar el código necesario para guardar los cambios, pero eso ya os lo dejo a vosotros.

Por cierto que los cuadros combinados (Microsoft Forms 2.0 ComboBox) también ofrecen la posibilidad de mostrar botones de opción, no se me ocurre como podremos sacar partido a las botones de opción en un cuadro combinado, pero todo se andará. Otra cosa que tienen los cuadros combinados es la posibilidad de mostrar la flecha de desplegar, ocultarla o mostrarla solo cuando recibe el foco.

Aún hay mas cosas interesantes (mucho diría yo) pero esas las dejamos para otro día, así os da tiempo a investigar.

Emilio Sancha 06/06/13

 

  • NOTA: La información contenida en esta página, así como el código fuente incluido en la misma, se proporciona TAL CUAL, sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo explicado, recomendado o sugerido en la presenta página.

    This page is provided AS IS with no warranties, and confers no rights. You assume all risk for your use.

    Ultima actualización:  Sábado, 15 de Octubre de 2016
    © Emilio Sancha 2.004-2.016