Desea crear un cuadro de diálogo personalizado en Word usando VBA para recopilar la entrada del usuario o mostrar opciones. Los cuadros de diálogo integrados de Word no se pueden personalizar completamente para su flujo de trabajo específico. Este artículo explica cómo crear un cuadro de diálogo UserForm con VBA, agregar controles y recuperar los valores que ingresa el usuario. Aprenderá los pasos exactos para diseñar, codificar e iniciar su propio cuadro de diálogo dentro de Word.
Puntos clave: Creación de un cuadro de diálogo VBA personalizado en Word
- Insertar > UserForm en el Editor de VBA: Crea un lienzo en blanco para su cuadro de diálogo personalizado.
- Controles del Cuadro de herramientas (TextBox, ComboBox, CommandButton): Agregue campos de entrada y botones a su UserForm.
- Método UserForm.Show: Inicia el cuadro de diálogo desde una macro para que los usuarios puedan interactuar con él.
Qué es un UserForm de VBA y por qué usarlo
Un UserForm es un cuadro de diálogo que se diseña en el Editor de Visual Basic. A diferencia de los cuadros de diálogo integrados de Word, un UserForm puede contener cualquier combinación de cuadros de texto, listas desplegables, casillas de verificación, botones de opción y otros controles. Se escribe código VBA detrás del formulario para manejar lo que sucede cuando el usuario hace clic en un botón o cambia un valor.
Necesita la pestaña Desarrollador habilitada en Word para acceder al Editor de VBA. Si no ve la pestaña Desarrollador, vaya a Archivo > Opciones > Personalizar cinta de opciones y marque la casilla Desarrollador en el panel derecho. El Editor de VBA se abre presionando Alt+F11.
Un cuadro de diálogo personalizado es útil cuando necesita recopilar múltiples piezas de información antes de ejecutar una macro. Por ejemplo, podría pedirle al usuario que ingrese un título de documento, seleccione un nombre de plantilla de una lista y elija una opción de formato. El UserForm almacena estos valores en variables que su macro puede usar.
Pasos para crear un cuadro de diálogo personalizado con VBA
- Abra el Editor de VBA e inserte un UserForm
Presione Alt+F11 para abrir el Editor de VBA. En el panel Explorador de proyectos, haga clic derecho en Normal o en el proyecto de su documento actual. Elija Insertar > UserForm. Aparece un formulario en blanco llamado UserForm1 en la ventana del editor. - Establezca las propiedades del UserForm
Con el UserForm seleccionado, presione F4 para abrir la ventana Propiedades. Cambie la propiedad Caption a un título descriptivo como “Configuración del documento”. Cambie la propiedad Name a algo significativo como frmDocumentSetup. Establezca Width y Height en valores que se ajusten a sus controles, por ejemplo 400 por 300. - Agregue controles desde el Cuadro de herramientas
Si el Cuadro de herramientas no está visible, vaya a Ver > Cuadro de herramientas. Arrastre un control Label al formulario y establezca su Caption en “Título del documento:”. Arrastre un TextBox junto a la etiqueta. Arrastre un ComboBox debajo de la etiqueta y establezca su propiedad RowSource más adelante en el código. Arrastre dos controles CommandButton y establezca sus propiedades Caption en “Aceptar” y “Cancelar”. - Escriba código para los botones Aceptar y Cancelar
Haga doble clic en el botón Aceptar. El editor de VBA abre la ventana de código para ese botón. Ingrese el siguiente código:Private Sub cmdOK_Click()
Me.Hide
End Sub
Haga doble clic en el botón Cancelar e ingrese:Private Sub cmdCancel_Click()
Me.Hide
End Sub
Más adelante agregará código para leer los valores antes de ocultar. - Escriba código para llenar el ComboBox cuando se carga el formulario
En la ventana de código, seleccione UserForm en la lista desplegable izquierda e Initialize en la lista desplegable derecha. Ingrese:Private Sub UserForm_Initialize()
Me.cboTemplates.AddItem "Report"
Me.cboTemplates.AddItem "Letter"
Me.cboTemplates.AddItem "Memo"
End Sub
Reemplace cboTemplates con el nombre real de su ComboBox. - Escriba una macro para mostrar el UserForm y recuperar valores
Inserte un nuevo módulo (Insertar > Módulo) e ingrese:Sub ShowMyDialog()
Dim strTitle As String
Dim strTemplate As String
frmDocumentSetup.Show
strTitle = frmDocumentSetup.txtDocumentTitle.Text
strTemplate = frmDocumentSetup.cboTemplates.Text
MsgBox "Title: " & strTitle & vbCrLf & "Template: " & strTemplate
End Sub
Ejecute la macro presionando F5 mientras está en el módulo o asignándola a un botón en la Barra de herramientas de acceso rápido. - Pruebe el cuadro de diálogo
Cierre el Editor de VBA y regrese a Word. Presione Alt+F8 para abrir el cuadro de diálogo Macros. Seleccione ShowMyDialog y haga clic en Ejecutar. Aparece su cuadro de diálogo personalizado. Ingrese un título, seleccione una plantilla y haga clic en Aceptar. Un cuadro de mensaje muestra los valores que ingresó.
Errores comunes al crear cuadros de diálogo personalizados
El UserForm no aparece cuando ejecuto la macro
La causa más común es que el nombre del UserForm en el método Show no coincide con la propiedad Name real del formulario. Verifique la propiedad Name en la ventana Propiedades. Si lo renombró a frmDocumentSetup, asegúrese de que su macro use ese nombre exacto. También confirme que la macro esté en el mismo proyecto que el UserForm.
El ComboBox está vacío cuando se abre el formulario
Los elementos del ComboBox deben agregarse en el evento UserForm_Initialize. Si agregó los elementos en un evento diferente o en el código del módulo, no aparecerán. Abra la ventana de código del UserForm y verifique que el evento Initialize contenga las líneas AddItem. Asegúrese de que el nombre del ComboBox en el código coincida con el nombre real del control.
El formulario se cierra pero los valores se pierden
Cuando usa Me.Hide, el formulario se oculta pero no se descarga. Los valores de los controles permanecen accesibles siempre que el formulario no se descargue. Si usa Unload Me en lugar de Me.Hide, el formulario y sus valores se destruyen. Use Me.Hide en el botón Aceptar y solo llame a Unload Me en el botón Cancelar si no necesita los valores. Alternativamente, declare variables públicas en el módulo y asigne los valores de los controles a ellas antes de ocultar el formulario.
Los controles se superponen o están desalineados
En el Editor de VBA, use el menú Formato para alinear controles. Seleccione varios controles manteniendo presionada la tecla Ctrl mientras hace clic en cada uno. Luego elija Formato > Alinear > Izquierdas para alinearlos verticalmente. Use Formato > Espaciado horizontal > Igualar para distribuir los controles uniformemente. Establezca la propiedad TabIndex de cada control para definir el orden en que los usuarios se mueven por los campos al presionar Tab.
UserForm de VBA vs InputBox: ¿Cuál debería usar?
| Elemento | UserForm | InputBox |
|---|---|---|
| Número de entradas | Ilimitado | Una por llamada |
| Tipos de control | Cuadro de texto, cuadro combinado, casilla de verificación, botón de opción, cuadro de lista | Solo entrada de texto |
| Validación | Código VBA personalizado en eventos de clic de botón | Ninguna integrada |
| Diseño visual | Tamaño, color, fuente y diseño totalmente personalizables | Apariencia fija, sin personalización |
| Complejidad del código | Moderada — requiere diseño de formulario y controladores de eventos | Mínima — una sola llamada a función |
| Mejor caso de uso | Múltiples entradas relacionadas o entrada de datos compleja | Indicaciones rápidas de un solo valor |
Ahora puede crear un cuadro de diálogo personalizado en Word usando UserForms de VBA. Comience diseñando un formulario con los controles necesarios, escriba el evento Initialize para llenar listas y agregue controladores de botones para recuperar la entrada del usuario. Para uso avanzado, agregue validación que verifique si los campos obligatorios están vacíos antes de ocultar el formulario. Use la propiedad Tag de los controles para almacenar metadatos que su macro lea más adelante.