İlişkisel açılır listeleri kullanma / Yenileme

0

Soru

VBA Kodunu kullanarak Word'de önceki bir açılır listenin seçimine bağlı bir açılır liste oluşturmaya çalışıyorum. Bir sürü video izledim ve forumlarda okudum, ancak çalışmasını sağlayamıyorum. Eski açılır listeler kelimesini kullandım ve bunları doğru şekilde etiketledim, ardından vba'da aşağıdaki kodu yazdım:

    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

Sorun şu ki, bu çözüm yalnızca bazen çalışıyor ve tutarlı değil. Olası seçimler yeterince hızlı güncellenmemiş gibi geliyor ve yalnızca sayılar mevcut olsa bile bir harf seçebiliyorum(bazen hiçbir şey seçemiyorum).

Bunu Office 365'te yapıyorum.

Geri bildirim çok takdir edilecektir

Şimdiden teşekkür ederim.

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

En iyi cevabı

0

Varsayım: iki açılır içerik denetimine sahip bir word belgeniz var. Her ikisi için de etiket adı ayarlanır: ccType ve ccSelection.

enter image description here

Sınıf modülündeThisDocument aşağıdaki kodu koyarsınız:

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

İlk içerik denetiminin (ccType) değerini değiştirip çıktığınızda, ContentControlOnExit tetiklenir.

Cctype'ı "bıraktıysanız" (ccSelection değil) fillccSelection, cctype'da seçilen değeri ileterek çağrılır.

Bu tür henüz ccSelection için ayarlanmamışsa, açılan girişler seçilen türe göre ayarlanır.

2021-11-25 14:06:12

Merhaba Ike, Yardımın için teşekkürler. Ne yazık ki çalışmasını sağlayamıyorum. İki içerik denetimi açılır listesini ayarladım ve dediğiniz gibi etiketledim. Kodu bir modüle koydum ve hala çalışmıyor. Ben bir şey eksik? İletişim kurmaları için iki açılır listeyi herhangi bir biçimde birbirine bağlamam gerekiyor mu? En iyisi, J
Jakob R.

Kodu ThisDocument modülüne yapıştırdınız mı (adım 1)? Document_ContentControlOnExit alt öğesini (adım 2) tıklarsanız, bu ekran görüntüsünde 3 ve 4 olarak işaretlenenleri görmelisiniz: i.imgur.com/Ug9zPPX.png
Ike

Teşekkür ederim. Bu ilk sorunu çözdü. Şimdi kod satırından kaynaklanmış gibi görünen bir Çalışma Zamanı Hatası 6124 alıyorum .Aralık.Metin = vbNullString
Jakob R.

Sadece Almanca bir Kelimem var-ama lütfen kontrol edin ccSelection vurgulanan onay kutusu işaretlenmemişse: i.imgur.com/Fx77qbn.png
Ike

İşaretlenmemiş, ancak hata hala korunduğu için düzenleyemediğimi söylüyor. Genel ayarlara daha yakından bakacağım
Jakob R.

Ben çıkardığımda ".Aralık.Text = vbNullString " gayet iyi çalışıyor, sadece etiketleme metnini güncellemiyor. Ancak bu konuda bir sorunum yok. Çok teşekkürler!
Jakob R.

Diğer dillerde

Bu sayfa diğer dillerde

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