SOFTWARE

Cómo generar contenido condicional en documentos de Word usando etiquetas de prefijo y VBA

dragonimagesistock 527665648

Muchos lectores preguntan por técnicas para mostrar contenido condicional. Afortunadamente, hay muchas maneras de hacer esto y revisaremos algunas de ellas en los próximos meses. En este artículo, comencé esta investigación con una de las soluciones más simples: un fragmento de código VBA que sabe cuándo ocultar y cuándo no ocultar, un párrafo, basado en un conjunto de prefijos de identificación en el documento de origen. Técnicamente, aprenderá a usar la propiedad Hidden de VBA para ocultar párrafos. Esta técnica es útil cuando necesita varios documentos que comparten contenido común y condicional. Puede generar varios documentos especializados manteniendo solo un documento de origen.

Estoy usando Word 2023 en un sistema Windows 10 de 64 bits, pero el código funcionará en versiones anteriores. Puede utilizar su propia documentación o descargar un archivo de demostración .docm o .doc.

configurar

Lo primero que necesitas es recurso Un documento con texto condicional, similar a la demostración que se muestra en Figura A. Este documento enumera preguntas de búsqueda del tesoro para estudiantes de jardín de infantes a sexto grado. Nuestro objetivo es utilizar el mismo documento (fuente) para ambos grupos de edad: jardín de infantes a segundo grado y tercero a sexto grado. El producto terminado nos permitirá especificar si la documentación generada mostrará preguntas para el grupo más joven o para el grupo mayor.

Figura A

wordconditionalcontenta

Nuestro documento de ejemplo tiene diferentes preguntas para los dos niveles de grupos de edad.

A primera vista se podría pensar por qué• El documento de demostración es intencionalmente simple, imagine implementar esta técnica con un documento más complejo y verá el valor en poco tiempo. El objetivo es modificar y administrar un documento de origen en lugar de varios documentos de origen, manteniendo la capacidad de generar varios documentos a partir del mismo documento de origen.

Una etiqueta de prefijo <> al comienzo de cada pregunta identifica a cada grupo: <1> representando a los niños pequeños y <2> Representar a los estudiantes mayores. Puede dividir su información en más de dos grupos; usé dos para simplificar el ejemplo, pero podría agregar un tercer grupo para la escuela intermedia, un cuarto para la escuela secundaria, y así sucesivamente.

Debido a que VBA se basa en el símbolo <> para expresar condiciones, prefije solo aquellos párrafos que desea que se evalúen condicionalmente. Además, el código evalúa los párrafos indicados por marcas de párrafo o retornos automáticos. En otras palabras, el código busca contenido entre la etiqueta y el primer retorno duro que encuentra. Usando el valor de identidad dentro de la etiqueta, el código decide si ocultar el contenido.

LEER  Noticias tecnológicas que quizás te hayas perdido: del 23 al 30 de junio

Una vez que tenga la documentación fuente, puede agregar código que permita al usuario especificar qué preguntas mostrar. Antes de agregar este código, si usa la versión Ribbon de Word, debe hacer dos cosas: guardar el documento como un archivo habilitado para macros y mostrar la pestaña Desarrollador.

guardar documento

Si está utilizando la versión de menú de Word, puede omitir esta y la siguiente sección. Los usuarios de la versión Ribbon deben guardar el documento como un archivo habilitado para macros de la siguiente manera:

  1. Haga clic en la pestaña Archivo.
  2. En el panel izquierdo, seleccione Guardar como.
  3. Introduzca el nombre del archivo.
  4. Seleccione Documento habilitado para macros de Word (*.docm), como se muestra en la figura Figura B.
  5. Clic en Guardar.

Figura B

wordconditionalcontentb

Guarde el documento de origen como un archivo habilitado para macros.

Mostrar pestaña de desarrollador

Utilizará las opciones de la pestaña Desarrollador para ingresar y ejecutar el código. Si esta pestaña no está visible, muéstrela de la siguiente manera:

  1. En el menú desplegable de la Barra de herramientas de acceso rápido, seleccione Más comandos. O haga clic en la pestaña Archivo, elija Opciones y luego elija Personalizar cinta.
  2. En la lista de pestañas principales (a la derecha), seleccione la opción Desarrollador como se muestra Figura C.
  3. Haga clic en Aceptar para volver a su documento.

Figura C

wordconditionalcontentc

Agregue la pestaña de desarrollador a la cinta.

añadir código

Ahora está listo para agregar código que determine qué problemas ocultar.introduzca el código Lista Ahaga clic en la pestaña Desarrollador y luego haga clic en Visual Basic en el grupo Código para abrir el Editor de Visual Basic (VBE).

Lista A

Sub ProcessHide()
'Hide questions according to age group.
'<1> represents questions for k through 2nd grade.
'<2> represents questions for 3rd through sixth grade.

Dim como un número entero
atenuar myPara a párrafo
atenuar myRange a rango
Atenuar documento a documento

establecer miRango = rango
establecer documento = DocumentoActivo

‘Habilitar controlador de errores.
En caso de error Ir al controlador de errores
‘Muestra todo el texto previamente oculto antes de comenzar.
‘No debería haberlo hecho; agregado como precaución en caso de que alguien guarde el original mientras oculta el problema.
doc.Range.Font.Hidden = Falso

‘Pídele al usuario que muestre un grupo de edad; el valor de entrada debe ser 1 o 2.
‘Puedes usar If en su lugar: If ToShow > 2 o ToShow < 1 Entonces...
‘—–Agregue más categorías aquí.

ToShow = InputBox(«Ingrese 1 o 2 para el grupo de edad.»)
Seleccionar casos para mostrar
Caso Is = 1 ‘No hacer nada
Caso Is = 2 ‘No hacer nada
Caso > 2
MsgBox «Por favor ingrese un valor de 1 o 2.», vbOKOnly, «Error»
Caso < 1
MsgBox «Por favor ingrese un valor de 1 o 2.», vbOKOnly, «Error»
Case Else ‘atrapa todo lo demás
‘ código de respuesta apropiado.
selección final

‘Determinar si la pregunta actual coincide con el grupo mostrar u ocultar.
‘ Primero verifique el carácter de la etiqueta < e ignore los párrafos que no comiencen con ese carácter.
‘Si el valor de entrada coincide con el valor de la etiqueta, oculta la primera etiqueta.
para cada myPara en doc.Paragraphs
si InStr(1, myPara, «<") entonces
si ToShow = myPara.Range.Characters(2) entonces
myRange.SetRange start:=myPara.Range.start, end:=myPara.Range.start + 3
myRange.Font.Hidden = Verdadero
por si acaso
por si acaso
próximo

‘Si el valor de entrada no coincide con el valor de la etiqueta, oculta myPara.
para cada myPara en doc.Paragraphs
si InStr(1, myPara, «<") entonces
Si ToShow <> myPara.Range.Characters(2) entonces myPara.Range.Font.Hidden = True
por si acaso
próximo

salir secundario

Controlador de errores:
Seleccionar número de error de caso
caso es = 13
MsgBox «Por favor ingrese un valor de 1 o 2.», vbOKOnly, «Error»
salir secundario
Otros casos
MsgBox Err.Descripción
doc.Range.Font.Hidden = Falso
salir secundario
selección final

final sub

En el Explorador de proyectos, seleccione Este documento e ingrese el código Figura DSi tiene varios documentos de Word abiertos, asegúrese de seleccionar el archivo correcto.

notas: No intente copiar el código VBA de esta página, ya que VBE se quejará de los caracteres especiales de la página. En su lugar, utilice los archivos de demostración descargables.

Figura D

wordconditionalcontentd

Inserte el código.

Asegúrese de que el manejo de errores esté configurado correctamente eligiendo Opciones en el menú Herramientas. A continuación, haga clic en la pestaña General, seleccione Interrumpir en errores no controlados en la sección Captura de errores y haga clic en Aceptar.

Guarde su trabajo y regrese a su documento de Word para ejecutar la macro. Haga clic en la pestaña Desarrollador y luego haga clic en Macros en el grupo Código.En el cuadro de diálogo que aparece, seleccione ProcessHide como se muestra Figura Ey luego haga clic en Ejecutar.

Figura E

wordconditionalcontente

Ejecute la macro.

Cuando la macro muestre el cuadro de entrada, ingrese el valor 1, como se muestra en la figura Figura FHacer esto oculta problemas con los prefijos. <2> marcar y ocultar <1> Etiquetas para las preguntas restantes, como se muestra Figura GSi ingresa 2, la macro ocultará el prefijo como <1> y ocultar <2> Etiqueta. En otras palabras, ingrese un valor que represente el grupo de edad que desea mostrar. Por supuesto, esta parte de la rutina podría ser más fácil de usar. Tus usuarios deben saber qué representan los valores 1 y 2. Elegí la simplicidad para que podamos centrarnos en la tecnología en lugar de la especialización.

Figura F

wordconditionalcontentf

Introduzca el valor 1 o 2 en el cuadro de entrada.

Figura G

wordconditionalcontentg

La macro oculta el problema del grupo de edad 2.

También tenga en cuenta que la macro no oculta oraciones sin el prefijo <>. El código ignora los párrafos que no comienzan con el carácter <. Ahora, echemos un vistazo más de cerca al código para que pueda personalizarlo para su documento.

Las primeras líneas declaran y definen algunas variables, habilitan el manejo de errores y muestran cualquier problema que pudiera haber estado oculto antes. Esto puede suceder si el usuario guarda el documento después de ejecutar la macro. Entrene a sus usuarios para que no hagan esto; en su lugar, ejecute la macro, imprima la cantidad deseada de búsquedas del tesoro y salga sin guardar. O ejecute la macro y cambie el nombre del documento para no sobrescribir el documento de origen.

La función InputBox() solicita al usuario un valor y Select Case fuerza que el valor de entrada sea 1 o 2. Si agrega más criterios (más grupos de edad), asegúrese de actualizar Seleccionar caso en consecuencia. Las dos primeras declaraciones de Case Is no son obligatorias, pero las agregué para que estén completas; es posible que desee hacer algo diferente al aplicar esta técnica a sus propios documentos.

El bloque For Each recorre cada párrafo del documento. En este caso, cada pregunta es un párrafo porque cada pregunta va seguida de una marca de párrafo (retorno duro). Si el primer carácter del párrafo actual (myPara) es el carácter <, el bloque If compara el valor de entrada del usuario (ToShow) con el segundo carácter del párrafo (valores 1 y 2 en la etiqueta de prefijo). Si los dos valores son iguales, el código oculta la etiqueta del prefijo, pero no el problema.

El siguiente bloque For Each funciona de manera similar, pero busca una discrepancia entre la variable ToShow y el valor del prefijo. Cuando no coinciden, el código oculta párrafos completos: prefijos y preguntas.

Al usar texto condicional, solo necesita actualizar un documento cuando necesita cambiar la pregunta de origen. Por ejemplo, es posible que tenga preguntas sobre una exhibición de ranas toro en ambos grupos de edad. Si cancela la exposición, puede abrir el documento de origen y eliminar todos los problemas relacionados solo en el documento de origen.

Si tiene varios documentos diferentes en diferentes categorías, verá el valor: actualizar un documento de origen o un documento principal es más eficiente que actualizar varios subdocumentos. Lo más probable es que lo utilice en documentos que contengan tanto texto genérico como condicional.

Más personalización

El propósito de este ejemplo es simple para que podamos centrarnos en el código y cómo funciona.Puede agregar más condiciones (grupos de edad) anteponiendo las etiquetas, p. <3>, <4>, y muchos más. Simplemente ajuste el primer Select Case para aceptar el nuevo valor. No necesitas cambiar nada más. Incluso puede agregar una respuesta a cada pregunta y ocultarla a los estudiantes, pero mostrárselas a los educadores, pero este artículo no cubre esa solución. Podría considerar ejecutar la macro como una macro AutoExec. Si lo hace, complica el mantenimiento, pero será mucho más sencillo para sus usuarios.

Enviarme preguntas sobre Office

Intentaré responder a las preguntas de los lectores lo mejor que pueda, pero no hay garantías. No envíe archivos a menos que se le solicite; las solicitudes de ayuda iniciales con archivos adjuntos se eliminarán y no se leerán. Puede enviar capturas de pantalla de los datos para ayudar a aclarar su pregunta. Cuando se comunique conmigo, sea lo más específico posible. Por ejemplo, «Por favor, resuelva mi libro de trabajo y solucione el problema» podría no obtener una respuesta, pero «¿Puede decirme por qué esta fórmula no devuelve el resultado esperado?», sí podría. Mencione la aplicación y la versión que está utilizando. Tecnopedia no me reembolsa por mi tiempo o experiencia cuando ayudo a los lectores, ni les cobro a los lectores a los que ayudo. Puede ponerse en contacto conmigo en [email protected].

Lea también…

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba