Добавить более 25 элементов в поле раскрывающегося списка в MS Word VBA

У меня есть два раскрывающихся поля с именами:

  1. Язык приложения:_____
  2. Страна приложения: _____

App country зависит от поля app language. Каждый раз, когда пользователь выбирает языковое приложение из раскрывающегося списка (запускается Macro и), в поле «Страна» будут отображаться только соответствующие страны.

Таким образом, проблема заключается в имени поля раскрывающейся формы app language, которое должно содержать более 84 элементов, но каждый раз, когда я запускаю следующий макрос, появляется ошибка, вы не можете добавить более 25 элементов в список:

Sub Alang()
With ActiveDocument.FormFields("alang").DropDown.ListEntries
.Clear
.Add "Afrikaans"
.Add "Albanian"
.Add "Arabic"
.Add "Assamese"
.Add "Belarusian"
.Add "Bengali"
.Add "Bosnian"
.Add "Bulgarian"
.Add "Catalan"
.Add "Cebuano"
.Add "Chinese - Simplified"
.Add "Chinese - Traditional"
.Add "Haitian Creole"
.Add "Croatian"
.Add "Czech"
.Add "Dagbani"
.Add "Danish"
.Add "Dholuo"
.Add "Dutch"
.Add "English"
.Add "Estonian"
.Add "Ewe"
.Add "Finnish"
.Add "French"
.Add "Gaelic - Irish"
.Add "Georgian"
.Add "German"
.Add "Greek"
.Add "Gujarati"
.Add "Hebrew"
.Add "Hiligaynon"
.Add "Hindi"
.Add "Hungarian"
.Add "Icelandic"
.Add "Iloko/Ilocano"
.Add "Indonesian"
.Add "Italian"
.Add "Itesot"
.Add "Japadhola"
.Add "Japanese"
.Add "Kannada"
.Add "Korean"
.Add "Latvian"
.Add "Lithuanian"
.Add "Luganda"
.Add "Macedonian"
.Add "Malay"
.Add "Malayalam"
.Add "Marathi"
.Add "Norwegian"
.Add "Odia/Oriya"
.Add "Pedi"
.Add "Polish"
.Add "Portuguese (Brazil)"
.Add "Portuguese (Portugal)"
.Add "Punjabi"
.Add "Romanian"
.Add "Russian"
.Add "Serbian - Cyrillic"
.Add "Serbian - Latin"
.Add "Sesotho"
.Add "Setswana"
.Add "Sinhalese"
.Add "Slovak"
.Add "Slovenian"
.Add "Spanish"
.Add "Spanish (Universal)"
.Add "Swahili"
.Add "Swedish"
.Add "Tagalog"
.Add "Tamil"
.Add "Telugu"
.Add "Thai"
.Add "Tsonga"
.Add "Turkish"
.Add "Twi"
.Add "Ukrainian"
.Add "Urdu"
.Add "Uyghur"
.Add "Venda"
.Add "Vietnamese"
.Add "Welsh"
.Add "Xhosa"
.Add "Zulu"
End With

End Sub

Пожалуйста! подскажите, этот метод правильный или мне нужно переключиться на другой или есть другой способ добавления более 25 элементов в выпадающий список?


person Ibn e Ashiq    schedule 09.03.2021    source источник
comment
Простой поиск в Google: support.microsoft.com/en-us/topic/   -  person StureS    schedule 09.03.2021


Ответы (2)


Если вы не пытаетесь поддерживать действительно старые версии Word, я поддерживаю предложение Macropod по управлению контентом. Word для 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
person John Korchok    schedule 09.03.2021
comment
Большой! Но мне нужно использовать этот список для запуска макроса всякий раз, когда выбран язык. как я упоминал ранее, мой второй список (страна приложения) зависит от языка, который я выбираю. Что возможно только с legacy tools ? - person Ibn e Ashiq; 10.03.2021
comment
Мы уже установили, что устаревший выпадающий список не может делать то, что вы хотите. Он имеет фиксированный максимальный размер, который нельзя увеличить, поэтому вам нужно начать работать над обходными путями: gregmaxey. com/word_tip_pages/content_control_custom_events.html - person John Korchok; 10.03.2021

Вы не можете добавить более 25 элементов в раскрывающийся список полей формы в MS Word. Это конструктивное ограничение.

Вместо раскрывающегося списка полей формы вам следует рассмотреть возможность использования раскрывающегося списка элементов управления содержимым. Выпадающие списки управления контентом могут иметь сотни, если не тысячи, записей (хотя как вам удастся выбрать элемент из такого монстра, не стоит думать). Например:

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

Конечно, использование раскрывающегося списка управления содержимым может потребовать совершенно другого подхода к другим аспектам того, что вы делаете; во-первых, поля формы и элементы управления содержимым не должны использоваться в одном и том же документе. Они не были предназначены для использования таким образом, и попытка сделать это является известным источником проблем.

person macropod    schedule 09.03.2021
comment
хорошо сделано! Но мне нужно использовать этот список для запуска макроса всякий раз, когда выбран язык. как я упоминал ранее, мой второй список (страна приложения) зависит от языка, который я выбираю. Что возможно только с legacy tools ? - person Ibn e Ashiq; 10.03.2021
comment
В этом случае используйте элемент управления содержимым в макросе выхода для выполнения любых необходимых действий. - person macropod; 10.03.2021