Cómo tener un valor de texto ilimitado en un documento desplegable de Word

Cómo tener un valor de texto ilimitado en un documento desplegable de Word

Necesito ingresar texto según la selección desplegable en Word. Pero sólo permite 255 caracteres.

¿Hay alguna manera de que pueda ingresar más que eso?

¿Quizás haya una solución para eso?

No encontré mucha información sobre eso. Por favor, dirígeme al camino correcto.

ingrese la descripción de la imagen aquí

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 tb1y los "nombres para mostrar" de su menú desplegable son my display name 1, my display name 2y así sucesivamente. Luego puedes poner el siguiente VBA en tu ThisDocumentmó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ó.

información relacionada