Cómo pasar parámetros a una macro de VBA desde un documento
🔍 WiseChecker

Cómo pasar parámetros a una macro de VBA desde un documento

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.

ADVERTISEMENT

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

  1. 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 Sub

    Ejecute esta macro una vez para almacenar los parámetros en el documento.

  2. 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 Sub

    Ejecute ProcessInvoice para ver los parámetros mostrados.

  3. 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

  1. 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, escriba txtCustomer. Establezca el Tipo en Texto normal. Haga clic en Aceptar.
  2. 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 en ddlRegion. Haga clic en Agregar para introducir elementos como Norte, Sur, Este, Oeste. Haga clic en Aceptar.
  3. 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 Sub

    Ejecute la macro después de completar los campos de formulario.

  4. 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

  1. Seleccionar texto en el documento
    Resalte cualquier palabra o frase en el cuerpo del documento.
  2. 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
  3. 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.

ADVERTISEMENT

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.

ADVERTISEMENT