Respuesta1
Elvalorno puede tener más de 255 caracteres y, en cualquier caso, no se muestra en el documento; incluso para hacerlo, tendría que "asignar" el control de contenido a un elemento en una parte XML personalizada, asignar un control de contenido de texto sin formato a ese elemento y poner ese control en el documento.
Entonces tienes que hacer esto de otra manera. Hay varias posibilidades, cada una con sus propias ventajas y desventajas. Por ejemplo, coloque todos sus textos en las entradas del bloque de creación en una galería específica (por ejemplo, "Personalizado 1" y categoría (por ejemplo, una que cree específicamente para este control). b. use un menú desplegable de campo de formulario heredado y un campo que inserte el valor que desee dependiendo en el valor seleccionado. c. "usar VBA".
(a) y (b) son los únicos enfoques que se me ocurren que no necesitan VBA. Tan pronto como utilice VBA, existen varias posibilidades.
Para (a), las entradas de los bloques de construcción deben estar en una plantilla de Word o en una plantilla de bloques de construcción especial. Entonces, si desea una solución de archivo único, debe convertir su documento en .dotx, no en .docx. AFAIK, el mecanismo de bloques de construcción no está disponible en Mac. Básicamente, elige una (galería predefinida y crea una categoría, coloca todas las entradas que desea mostrar en el menú desplegable de esa galería/categoría, luego configura las propiedades del control Contenido del bloque de creación para usar esa galería/categoría. El contenido de la entrada seleccionada es se muestra directamente en el control.nombresy el contenido se muestran en el "desplegable". Los nombres tienen una limitación de longitud (creo que 32 caracteres).
Para (b), crea un menú desplegable de campo de formulario heredado con los "nombres para mostrar" que desea y configura el campo del formulario para "calcular al salir". Creo que estás limitado a 25 opciones. Los nombres para mostrar están limitados a unos 50 caracteres.
Luego configura uno o más campos que muestran el texto que desea, utilizando el "nombre para mostrar". En su forma más simple, podría usar un campo IF para cada valor del menú desplegable, por lo que si el menú desplegable tuviera valores "abc", "def", "ghi", etc., podría usar
{ IF "{ Dropdown1 }" = "abc" "The chunk of text you want for abc" "" }{ IF "{ Dropdown1 }" = "def" "The chunk of text you want for def" "" }
Luego debe "proteger el documento para formularios", lo que significa que el usuario no puede realizar ninguna edición más que completar el formulario. O puede proteger una sección del documento, en cuyo caso el usuario podrá editar el resto del documento, con algunas restricciones.
Si sigue la ruta de VBA, supongamos que va a utilizar un menú desplegable de Control de contenido. Luego necesita un evento para ejecutar su VBA; puede usar un evento de control de contenido o, si asigna su control de contenido a una parte XML personalizada, puede usar un evento "Almacén de datos" (vinculado a la parte XML). Luego, su VBA necesita saber dónde mostrar el texto y qué texto mostrar.
Entonces, imaginemos que su menú desplegable tiene Título dd1
, va a colocar su texto en un control de contenido de texto sin formato titulado tb1
y los "nombres para mostrar" de su menú desplegable son my display name 1
, my display name 2
y así sucesivamente. Luego puedes poner el siguiente VBA en tu ThisDocument
módulo. Esto se "activará" cuando haga clic fuera del control desplegable o salga de él.
NB, para que esto funcione, la propiedad "el contenido no se puede editar" de tb1 debe estardesenfrenado
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
Dim cc1 As ContentControl
Select Case ContentControl.Title
' the dropdown
Case "dd1"
' Assumes "tb1" exists
Set cc1 = ContentControl.Range.Document.SelectContentControlsByTitle("tb1")(1)
If ContentControl.ShowingPlaceholderText Then
' Resets tb1 to its placeholder text
cc1.Range.Text = ""
Else
Select Case ContentControl.Range.Text
Case "my display name 1"
cc1.Range.Text = "whatever text you want for abc"
Case "my display name 2"
cc1.Range.Text = "whatever text you want for def"
Case Else
'
End Select
End If
Set cc1 = Nothing
Case Else
'
End Select
End Sub
Personalmente, prefiero usar el mapeo de control de contenido y los eventos del almacén de datos, pero es más complicado y creo que el enfoque anterior debería cumplir con los requisitos tal como lo describió.