Добавление строки в блок управления контентом / Заменить раскрывающийся список на Контент-контроль - PullRequest
1 голос
/ 07 апреля 2020

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

Вот мой код:

Dim MyRequest As Object
Dim Data() As String
Dim i As Integer
Dim j As Integer
Dim maxi As Integer

    Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
    MyRequest.Open "GET", _
    "https... (This is hidden for security resons, /csv/)"

    ' Send Request.
    MyRequest.Send

    'And we get this response
    'MsgBox MyRequest.ResponseText
    Data = Split(MyRequest.ResponseText, "|")

    If UBound(Data()) > 25 Then
        maxi = 25
    Else
        maxi = UBound(Data())
    End If


    For j = 1 To 6
        ActiveDocument.FormFields("Dropdown" & j).DropDown.ListEntries.Clear
        For i = 0 To maxi - 1
            ActiveDocument.FormFields("Dropdown" & j).DropDown.ListEntries.Add Name:=Data(i)
        Next i
    Next j
End Sub

1 Ответ

0 голосов
/ 08 апреля 2020

Вы не должны использовать элементы управления содержимым и поля формы в одном документе. Они не были предназначены для такого использования, и это является известным источником проблем.

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

Sub FreeText()
Dim StrNew As String, i As Long
With Selection.FormFields(1).DropDown
  i = .ListEntries.Count
  If .Value = i Then
    StrNew = Trim(InputBox("Input your text", "Data Entry", .ListEntries(i).Name))
    If StrNew = vbNullString Then Exit Sub
      .ListEntries(i).Delete
      .ListEntries.Add StrNew
      .Value = i
  End If
End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...