在 MS Word VBA 的下拉列表字段中添加超过 25 个项目

问题描述

我有两个下拉字段命名:

  1. 应用语言:_____
  2. 应用国家/地区:_____

!= 0 依赖于 App country 字段。每次用户从下拉列表中选择语言应用程序(运行 apP Language 并且)国家/地区字段将仅显示相关国家/地区。

所以问题是“下拉表单字段”命名 Macro 应该包含超过 84 个项目,但每次我运行以下宏时,它都会显示错误“您不能在列表中添加超过 25 个项目”:

apP Language

请!建议这个方法是正确的,或者我需要切换到另一个 或者有另一种方法可以在下拉列表中添加 25 个以上的项目?

解决方法

除非您尝试支持真正旧版本的 Word,否则我支持 Macropod 的内容控制建议。 Word for Mac 2011 是最后一个不支持它们的版本。这是内容控件版本中的代码:

Sub Alang()
    Dim oCC As ContentControl
        
    For Each oCC In ActiveDocument.ContentControls
        If oCC.Title = "alang" Then
            With oCC.DropdownListEntries
                .Clear
                .Add "Afrikaans"
                'Other languages here
            End With
        End If
    Next oCC
End Sub
,

不能向 MS Word 中的表单域下拉列表添加超过 25 个项目。这是设计限制。

您应该考虑使用内容控件下拉菜单,而不是使用表单域下拉菜单。内容控制下拉菜单可以有数百个,如果不是数千个条目(尽管你如何管理从这样一个怪物中选择一个项目并不值得考虑)。例如:

Sub Demo()
Application.ScreenUpdating = False
Dim i As Long
Const StrList As String = "|Afrikaans|Albanian|Arabic|Assamese|Belarusian|Bengali|" & _
  "Bosnian|Bulgarian|Catalan|Cebuano|Chinese - Simplified|Chinese - Traditional|" & _
  "Creole - Haitian|Croatian|Czech|Dagbani|Danish|Dholuo|Dutch|English|Estonian|" & _
  "Ewe|Finnish|French|Gaelic - Irish|Gaelic - Welsh|Georgian|German|Greek|Gujarati|" & _
  "Hebrew|Hiligaynon|Hindi|Hungarian|Icelandic|Iloko/Ilocano|Indonesian|" & _
  "Italian|Itesot|Japadhola|Japanese|Kannada|Korean|Latvian|Lithuanian|" & _
  "Luganda|Macedonian|Malay|Malayalam|Marathi|Norwegian|Odia/Oriya|Pedi|" & _
  "Polish|Portuguese (Brazil)|Portuguese (Portugal)|Punjabi|Romanian|Russian|" & _
  "Serbian - Cyrillic|Serbian - Latin|Sesotho|Setswana|Sinhalese|Slovak|" & _
  "Slovenian|Spanish|Spanish (Universal)|Swahili|Swedish|Tagalog|Tamil|Telugu|" & _
  "Thai|Tsonga|Turkish|Twi|Ukrainian|Urdu|Uyghur|Venda|Vietnamese|Welsh|Xhosa|Zulu"
With ActiveDocument.SelectContentControlsByTitle("alang")
  For c = 1 To .Count
    With .Item(c)
      .SetPlaceholderText Text:="Choose a Language"
      With .DropdownListEntries
        .Clear
        For i = 1 To UBound(Split(StrList,"|"))
          .Add Split(StrList,"|")(i)
        Next
      End With
    End With
  Next
End With
Application.ScreenUpdating = True
End Sub

当然,使用内容控制下拉菜单可能需要对您正在做的任何其他方面采取完全不同的方法;一方面,不应在同一文档中使用表单域和内容控件。它们并非旨在以这种方式使用,因此尝试这样做是一个已知的问题来源。