El uso de Refresco/relacional de las listas desplegables

0

Pregunta

Estoy tratando de configurar un menú desplegable que depende de la selección de la anterior lista desplegable en Word con VBA-Código. He visto un montón de videos y leer a través de los foros, pero no puedo hacer que funcione. He utilizado la Palabra Legado listas desplegables y etiquetados correctamente, entonces escribí el siguiente código en VBA:

    Dim xDirection As FormField
    Dim xState As FormField
    On Error Resume Next
    Set xDirection = ActiveDocument.FormFields("ddType")
    Set xState = ActiveDocument.FormFields("ddSelection")
    If ((xDirection Is Nothing) Or (xState Is Nothing)) Then Exit Sub
    With xState.DropDown.ListEntries
    .Clear
        Select Case xDirection.Result
            Case "Numbers"
                .Add "1"
                .Add "2"
                .Add "3"
                .Add "4"
                .Add "5"
                .Add "6"
            Case "Letters"
                .Add "A"
                .Add "B"
                .Add "C"
            Case "None"
                .Add "Not applicable"
    End Select
    End With
End Sub

El problema es que esta solución sólo funciona a veces y no siempre. Se siente como la posible selecciones no se actualizan lo suficientemente rápido y puedo elegir una carta, incluso si sólo los números deben estar disponibles (a veces no soy capaz de seleccionar nada en absoluto).

Puedo hacer esto en Office 365.

Comentarios serán muy apreciados

Gracias de antemano!

ms-word office365 vba
2021-11-23 08:57:31
1

Mejor respuesta

0

Asunción: usted tiene un documento de word con dos desplegable controles de contenido. Por tanto el nombre de la etiqueta se establece: ccType y ccSelection.

enter image description here

En el módulo de clase ThisDocument poner el siguiente código:

Option Explicit

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
If ContentControl.Tag = "ccType" Then
    fillccSelection ContentControl.Range.Text
End If
End Sub

Private Sub fillccSelection(valueType As String)

Dim cc As ContentControl
Set cc = ThisDocument.SelectContentControlsByTag("ccSelection")(1)

If cc.Title <> valueType Then
    With cc
        .Title = valueType  'set title to current type so that we now if coming here next time
        .Range.Text = vbNullString  'clear content as it has to change with new values
        With .DropdownListEntries
            .Clear
            Select Case valueType
                Case "Numbers"
                    cc.SetPlaceholderText Text:="Please select a number"
                    .Add "1"
                    .Add "2"
                    .Add "3"

                Case "Letters"
                    cc.SetPlaceholderText Text:="Please select a letter"
                    .Add "A"
                    .Add "B"
                    .Add "C"
            End Select
        End With
    End With
End If
End Sub

Cada vez que cambie el valor del primer control de contenido (ccType) y la salida es la ContentControlOnExit es despedido.

Si la "izquierda" ccType (y no ccSelection) fillccSelection se llama pasando el valor seleccionado en ccType.

Si este tipo no es de ccSelection, el desplegable de entradas se establecen según el tipo seleccionado.

2021-11-25 14:06:12

Hola Ike, Gracias por su ayuda. Por desgracia yo no soy capaz de hacer que funcione. Me juego hasta la dos de controlar el contenido de las listas desplegables y etiquetados como usted dijo. Pongo el código en un módulo y todavía no funciona. Me estoy perdiendo algo? ¿Tengo que atar las dos desplegables juntos en cualquier forma, de modo que se comunican? Mejor, J
Jakob R.

Hizo pegar el código en el módulo ThisDocument (paso 1)? Si hace clic en el Document_ContentControlOnExit sub (paso 2) usted debe ver lo que está marcado 3 y 4 en esta captura de pantalla: i.imgur.com/Ug9zPPX.png
Ike

Gracias. Que resuelto el primer problema. Ahora me sale un Error en Tiempo de Ejecución 6124 que parece que se originan a partir de la línea de código .La gama.Texto = vbNullString
Jakob R.

Sólo tengo una Palabra alemana - pero por favor, consulte la ccSelection si la casilla de verificación está desactivada: i.imgur.com/Fx77qbn.png
Ike

No está marcada, pero el error me dice que no puedo editar porque está protegido. Voy a tener una mirada más cercana a la configuración general
Jakob R.

Cuando llevo a cabo el ".La gama.Texto = vbNullString" funciona perfectamente bien, que no acabo de actualizar el etiquetado de texto. Sin embargo, yo estoy bien con eso. Muchas gracias!
Jakob R.

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................