Pomocí/Refresh relační rozbalovacích nabídkách

0

Otázka

Snažím se nastavit rozbalovací nabídku, která je závislá na výběru předchozí rozevírací seznam v aplikaci Word pomocí VBA-Kód. Viděla jsem spoustu videí a číst prostřednictvím fór, ale nemůžu, aby to fungovalo. Použil jsem Slovo Dědictví rozbalovacích nabídkách a označeny správně, pak jsem napsal následující kód 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

Problém je, že toto řešení funguje jen někdy a ne důsledně. To se jeví jako možné výběry nejsou aktualizovány dost rychle a mohu si vybrat dopis, i když jen čísla by měla být k dispozici (někdy nejsem schopen vybrat vůbec nic).

Já si to v Office 365.

Zpětná vazba bude vysoce ocenil

Děkuji předem!

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

Nejlepší odpověď

0

Předpoklad: máte dokument aplikace word s dvěma rozbalovací ovládací prvky obsahu. Pro název značky se nachází: ccType a ccSelection.

enter image description here

V modulu třídy ThisDocument vložíte následující kód:

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

Vždy, když změníte hodnotu první ovládací prvek obsahu (ccType) a exit to ContentControlOnExit je vyhodil.

Pokud se vám "odešel" ccType (a ne ccSelection) fillccSelection se nazývá předáním hodnoty vybrané v ccType.

Pokud se tento typ ještě není nastavena pro ccSelection, rozbalovací položky jsou nastaveny v závislosti na zvoleném typu.

2021-11-25 14:06:12

Ahoj Ike, Děkujeme vám za vaši pomoc. Bohužel jsem nebyl schopen, aby to fungovalo. Jsem nastavit dva ovládací prvek obsahu, rozbalovacích nabídkách a označili je, jak jste řekl. Dal jsem kód do modulu, a to stále nefunguje. Jsem něco chybí? Musím svázat dvou rozbalovacích nabídkách spolu v jakékoliv formě tak, aby se komunikovat? Nejlepší, J
Jakob R.

Jste vložit kód ve Finanční modulu (krok 1)? Pokud klepnete na tlačítko v Document_ContentControlOnExit sub (krok 2), měli byste vidět, co je označené 3 a 4 v tomto snímku: i.imgur.com/Ug9zPPX.png
Ike

Děkuji. To vyřešil první problém. Teď jsem si Run-Time Error 6124, že se zdá, že pocházejí z kódu řádku .Rozsah.Text = vbNullString
Jakob R.

Mám jen německé Slovo - ale, prosím, zkontrolujte, zda ccSelection pokud zvýrazněné políčko je zaškrtnuto: i.imgur.com/Fx77qbn.png
Ike

To je zaškrtnuté, ale chyba pořád mi říká, že nemohu upravovat, protože to je chráněno. Budu se blíže podívat na obecné nastavení
Jakob R.

Když si vezmu ".Rozsah.Text = vbNullString" to funguje naprosto v pořádku, to prostě není aktualizace označování textu. Nicméně jsem v pořádku s tím. Děkuji moc!!!
Jakob R.

V jiných jazycích

Tato stránka je v jiných jazycích

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