Utilizzando/Aggiornamento relazionale menu a discesa

0

Domanda

Sto cercando di impostare un menu a tendina che dipende dalla scelta di un precedente discesa in Word utilizzando VBA-Codice. Ho guardato un sacco di video e leggere i forum, ma non riesco a farlo funzionare. Ho usato la Parola Eredità discesa ed etichettati correttamente, poi ho scritto il seguente codice 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

Il problema è che questa soluzione funziona solo a volte e non sempre. Ci si sente come la possibilità di effettuare delle selezioni non vengono aggiornati abbastanza veloce e mi permette di scegliere una lettera, anche se solo i numeri dovrebbero essere disponibili (a volte non riesco a selezionare nulla).

Faccio questo in Office 365.

Il Feedback sarà molto apprezzato

Vi ringrazio in anticipo!

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

Migliore risposta

0

Ipotesi: è un documento di word con due a discesa controlli di contenuto. Per entrambi il nome del tag è impostato: ccType e ccSelection.

enter image description here

Nel modulo di classe ThisDocument hai messo il seguente codice:

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

Ogni volta che si modifica il valore del primo controllo dei contenuti (ccType) e l'uscita è il ContentControlOnExit è sparato.

Se è "di sinistra" ccType (e non ccSelection) fillccSelection è chiamato, passando il valore selezionato in ccType.

Se questo tipo non è ancora impostato per ccSelection, il menù a tendina le voci sono impostate in base al tipo selezionato.

2021-11-25 14:06:12

Ciao Ike, Grazie per il vostro aiuto. Purtroppo io non sono in grado di farlo funzionare. Ho impostato i due contenuti di controllo discesa e taggato come detto. Ho messo il codice in un modulo e ancora non funziona. Mi manca qualcosa? Devo legare i due menu a discesa insieme, in qualsiasi forma, in modo che possano comunicare? Migliori, J
Jakob R.

Hai incollare il codice nel modulo Documento (punto 1)? Se si sceglie la Document_ContentControlOnExit sub (fase 2) si dovrebbe vedere ciò che è segnato 3 e 4, in questo screenshot: i.imgur.com/Ug9zPPX.png
Ike

Grazie. Risolto il primo problema. Ora ottengo un Errore di Run-Time 6124 che sembra provenire da riga di codice .La gamma.Testo = vbNullString
Jakob R.

Ho solo una Parola tedesca, ma si prega di controllare ccSelection se la evidenziata la casella di controllo è deselezionata: i.imgur.com/Fx77qbn.png
Ike

Questa opzione è deselezionata, ma l'errore mi dice che non posso modificare, perché è protetta. Io sono un occhiata più da vicino le impostazioni generali
Jakob R.

Quando prendo l' ".La gamma.Testo = vbNullString" funziona perfettamente, solo che non aggiorna l'etichettatura di testo. Comunque io sto bene con quello. Vi ringrazio molto!
Jakob R.

In altre lingue

Questa pagina è in altre lingue

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