Utilização/Atualização relacional dropdowns

0

Pergunta

Estou tentando configurar um menu suspenso que é dependente da selecção de um anterior suspensa no Word usando o VBA-Código. Eu assisti a um monte de vídeos e leitura através de fóruns, mas eu não posso fazê-lo funcionar. Eu usei a Palavra Legado dropdowns e rotuladas corretamente, então eu escrevi o seguinte código 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

O problema é que esta solução só funciona às vezes, e não de forma consistente. Parece que as possíveis seleções não são atualizados rápido o suficiente e eu posso escolher uma carta, mesmo se apenas os números devem estar disponíveis (por vezes não sou capaz de selecionar nada).

Eu faço isso no Office 365.

O Feedback será muito apreciada

Obrigado antecipadamente!

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

Melhor resposta

0

Suposição: você tem um documento do word com dois suspensa controles de conteúdo. Para tanto o nome da marca é definida: ccType e ccSelection.

enter image description here

No módulo de classe de ThisDocument colocar o seguinte 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

Sempre que você alterar o valor do primeiro controle de conteúdo (ccType) e a de saída é a ContentControlOnExit é acionado.

Se você "esquerda" ccType (e não ccSelection) fillccSelection é chamada passando o valor selecionado no ccType.

Se este tipo ainda não está definido para ccSelection, o pendente entradas são definidas de acordo com o tipo selecionado.

2021-11-25 14:06:12

Olá Ike, Obrigado por sua ajuda. Infelizmente eu não sou capaz de fazer o trabalho. Eu configurar as duas controle de conteúdo dropdowns e codificado como você disse. Eu coloquei o código em um módulo e ele ainda não funciona. Eu estou faltando alguma coisa? Tenho para amarrar os dois menus suspensos em conjunto, sob qualquer forma, de modo que eles se comunicam? Melhor, J
Jakob R.

Você colar o código no módulo ThisDocument (passo 1)? Se clicar no Document_ContentControlOnExit sub (passo 2) você deve ver o que está marcado 3 e 4 na imagem abaixo: i.imgur.com/Ug9zPPX.png
Ike

Obrigado. Que resolveu o primeiro problema. Agora eu recebo um Erro de Tempo de Execução 6124 que parece originar-se a partir da linha de código .Intervalo.Texto = vbNullString
Jakob R.

Eu só tenho uma Palavra alemã - mas, por favor, verifique ccSelection se o destaque caixa de seleção é desmarcada: i.imgur.com/Fx77qbn.png
Ike

Esta opção está desmarcada, mas o erro ainda me diz que eu não posso editar porque ele está protegido. Vou dar uma olhada em configurações gerais
Jakob R.

Quando eu tirar a ".Intervalo.Texto = vbNullString" ele funciona perfeitamente bem, é só não atualizar a rotulagem de texto. No entanto, eu estou bem com isso. Muito obrigado!
Jakob R.

Em outros idiomas

Esta página está em outros idiomas

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