Tiene un documento de Word y desea ejecutar una macro de VBA que use valores del propio documento. En lugar de editar el código de la macro cada vez que necesita una entrada diferente, puede pasar parámetros directamente desde el contenido del documento. Este artículo explica tres métodos confiables para enviar datos desde su documento a una macro de VBA: usar variables de documento, campos de formulario y texto seleccionado. Aprenderá a configurar cada método y a escribir el código de la macro que lee los parámetros.
Puntos clave: Pasar parámetros a una macro de VBA desde un documento de Word
- Variables de documento (colección Variables): Almacene pares clave-valor dentro del documento que las macros pueden leer sin interacción del usuario.
- Campos de formulario (DropDown, TextInput, CheckBox): Permita que los usuarios seleccionen o escriban valores que una macro recupera a través de la colección
FormFields. - Texto seleccionado (Selection.Range.Text): Pase el texto resaltado actualmente como parámetro a una macro que lo procese.
Entender cómo se pasan los parámetros desde un documento a una macro de VBA
Una macro de VBA normalmente se ejecuta con argumentos fijos o sin argumentos. Para que la macro sea dinámica, necesita una forma de inyectar datos del documento en la macro en tiempo de ejecución. Word proporciona varios objetos integrados que almacenan datos dentro del propio archivo del documento o que reflejan la selección actual del usuario. Estos objetos actúan como puente entre el contenido del documento y el código de VBA.
Los tres mecanismos principales son las variables de documento, los campos de formulario y el objeto Selection. Las variables de documento son pares clave-valor invisibles que viajan con el documento. Los campos de formulario son controles interactivos visibles que los usuarios completan. El objeto Selection refleja el texto que el usuario haya resaltado en el momento en que se ejecuta la macro. Cada método tiene un caso de uso y un procedimiento de configuración diferentes.
Variables de documento
Una variable de documento es una cadena oculta almacenada en el documento. Se establece mediante VBA o una macro rápida, y cualquier otra macro puede leerla. La variable persiste al guardar y volver a abrir el documento. Use este método cuando el valor del parámetro no cambie con frecuencia o cuando desee establecerlo mediante programación antes de que se ejecute la macro principal.
Campos de formulario
Los campos de formulario de Word incluyen cuadros de texto, listas desplegables y casillas de verificación. Forman parte del contenido del documento y se pueden proteger para que los usuarios solo completen los campos. Una macro lee el valor actual de cualquier campo de formulario usando la colección ActiveDocument.FormFields. Este método funciona bien cuando desea que el usuario elija o escriba el valor del parámetro.
Texto seleccionado
Cuando el usuario selecciona texto en el documento, el objeto Selection captura ese rango. Puede pasar el texto seleccionado como parámetro de cadena a una macro. Este método es el más sencillo de implementar porque no requiere ninguna configuración especial del documento. Úselo cuando la macro procese el texto que el usuario resalte.
Configurar cada método para pasar parámetros
Siga los pasos a continuación para implementar cada método de paso de parámetros. Primero debe habilitar la pestaña Desarrollador en Word: vaya a Archivo > Opciones > Personalizar cinta de opciones y marque la casilla Desarrollador.
Método 1: Usar variables de documento
- Crear una macro para establecer una variable de documento
Abra el editor de VBA con Alt+F11. Inserte un nuevo módulo y pegue este código:Sub SetDocVar() ActiveDocument.Variables("CustomerName") = "Acme Corp" ActiveDocument.Variables("InvoiceTotal") = "1250.75" ActiveDocument.Save End SubEjecute esta macro una vez para almacenar los parámetros en el documento.
- Crear la macro principal que lee las variables
Agregue este código al mismo módulo:Sub ProcessInvoice() Dim custName As String Dim invTotal As String custName = ActiveDocument.Variables("CustomerName").Value invTotal = ActiveDocument.Variables("InvoiceTotal").Value MsgBox "Customer: " & custName & vbCrLf & "Total: " & invTotal End SubEjecute ProcessInvoice para ver los parámetros mostrados.
- Actualizar el valor de la variable
Para cambiar el parámetro, edite la macro SetDocVar con el nuevo valor y ejecútela de nuevo. El valor actualizado está disponible para cualquier macro que lea la variable.
Método 2: Usar campos de formulario
- Insertar un campo de formulario de texto en el documento
En la pestaña Desarrollador, haga clic en el botón Herramientas heredadas (el icono de la caja de herramientas). En Formularios heredados, haga clic en el botón Campo de formulario de texto. Aparece un cuadro de texto sombreado. Haga clic con el botón derecho y elija Propiedades. En el cuadro Marcador, escribatxtCustomer. Establezca el Tipo en Texto normal. Haga clic en Aceptar. - Insertar un campo de formulario desplegable
Haga clic de nuevo en Herramientas heredadas y seleccione Campo de formulario desplegable. Haga clic con el botón derecho en el campo y elija Propiedades. Establezca el Marcador enddlRegion. Haga clic en Agregar para introducir elementos como Norte, Sur, Este, Oeste. Haga clic en Aceptar. - Crear la macro que lee los campos de formulario
Abra el editor de VBA y agregue este código:Sub ProcessFormData() Dim customer As String Dim region As String customer = ActiveDocument.FormFields("txtCustomer").Result region = ActiveDocument.FormFields("ddlRegion").Result MsgBox "Customer: " & customer & vbCrLf & "Region: " & region End SubEjecute la macro después de completar los campos de formulario.
- Proteger el documento para rellenar formularios (opcional)
En la pestaña Desarrollador, haga clic en Restringir edición. En Restricciones de edición, marque Permitir solo este tipo de edición en el documento y elija Rellenar formularios. Haga clic en Sí, aplicar protección. Los usuarios solo pueden interactuar con los campos de formulario.
Método 3: Usar texto seleccionado
- Seleccionar texto en el documento
Resalte cualquier palabra o frase en el cuerpo del documento. - Crear la macro que captura la selección
En el editor de VBA, agregue este código:Sub ProcessSelection() Dim selectedText As String selectedText = Selection.Range.Text ' Remove the trailing paragraph mark if present If Right(selectedText, 1) = vbCr Then selectedText = Left(selectedText, Len(selectedText) - 1) End If MsgBox "You selected: " & selectedText End Sub - Asignar la macro a un atajo de teclado o botón
Vaya a Archivo > Opciones > Personalizar cinta de opciones. Haga clic en Personalizar junto a Atajos de teclado. En Categorías, seleccione Macros. En Macros, seleccione ProcessSelection. Presione un atajo como Alt+Shift+S y haga clic en Asignar. Ahora puede seleccionar texto y presionar el atajo para ejecutar la macro.
Errores comunes al pasar parámetros desde un documento
La variable de documento devuelve una cadena vacía
Si la variable nunca se ha establecido, leerla devuelve una cadena vacía. Ejecute siempre la macro que establece la variable antes de la macro que la lee. Para evitar errores, compruebe si la variable existe con On Error Resume Next o recorra la colección Variables.
El resultado del campo de formulario contiene espacios o saltos de línea adicionales
La propiedad Result devuelve el texto exacto que escribió el usuario. Recorte los espacios iniciales y finales con la función Trim en su macro. Si el campo contiene un salto de línea, reemplácelo por un espacio usando Replace.
La selección incluye caracteres no imprimibles
Cuando el usuario selecciona texto que incluye el marcador de fin de celda en una tabla o la marca de fin de párrafo, la propiedad Selection.Range.Text incluye esos caracteres. Use el código mostrado en el Método 3 para eliminar la marca de párrafo final. Para celdas de tabla, compruebe si Selection.Information(wdWithinTable) es True y actúe en consecuencia.
Variables de documento vs campos de formulario vs texto seleccionado: comparación
| Elemento | Variables de documento | Campos de formulario | Texto seleccionado |
|---|---|---|---|
| Esfuerzo de configuración | Bajo (solo macro de VBA) | Medio (insertar campos, establecer propiedades) | Bajo (no requiere configuración) |
| Interacción del usuario | Ninguna (oculta) | Requerida (el usuario completa) | Requerida (el usuario selecciona texto) |
| Persistencia del parámetro | Sí (se guarda con el documento) | Sí (se guarda con el documento) | No (se pierde cuando cambia la selección) |
| Ideal para | Parámetros fijos o establecidos mediante programación | Entrada del usuario con opciones controladas | Procesamiento rápido y puntual del contenido resaltado |
Ahora puede pasar parámetros desde su documento de Word a una macro de VBA usando variables de documento, campos de formulario o texto seleccionado. Elija el método que se adapte a su flujo de trabajo. Como siguiente paso, explore cómo pasar parámetros a una macro desde una celda de tabla de Word combinando la propiedad Selection.Information(wdStartOfRangeColumnNumber) con la colección Cells. Un consejo avanzado: use variables de documento para almacenar los últimos valores de parámetro usados, de modo que la macro los recuerde entre ejecuciones.