Ссылки на элементы управления содержимым текста - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь сослаться на указанную строку и вставить ее в заданный c элемент управления содержимым текста и не смог сделать это правильно

В основном я прошел и попробовал несколько разных вещей, в первую очередь это:

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)

Dim ccs As ContentControls, cc As ContentControl
Set ccs = ActiveDocument.ContentControls
For Each cc In ccs
  If cc.Title = "ComboBox1" And cc.Range.Text = "Choose an item." Then
  SelectContentControlsByTitle("TextBox1").Add.SetPlaceholderText , , "Please make a drop down selection or manually fill out if not applicable"

Выше не работает, так как каждый раз, когда я выхожу из поля со списком контроллера контента, он фактически воссоздает "placeholdertext" несколько раз. Мне нужно это заполнить только элемент управления «TextBox1».

Я также пытался сделать что-то вроде этого,

Dim ccs As ContentControls, cc As ContentControl
Set ccs = ActiveDocument.ContentControls
Set CB1 = SelectContentControlsByTitle("TextBox1")
For Each cc In ccs
  If cc.Title = "ComboBox1" And cc.Range.Text = "Choose an item." Then
  CB1.Value = "Please make a drop down selection or manually fill out if not applicable"

Из-за типа значение не может быть использовано таким образом. Это тоже не работает.
Ниже приведен оригинальный способ, который я делал с TextBox Active-X, который работает;

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)

Dim ccs As ContentControls, cc As ContentControl
Set ccs = ActiveDocument.ContentControls
For Each cc In ccs
  If cc.Title = "ComboBox2" And cc.Range.Text = "Choose an item." Then
  TextBox2.Value = "Please make a drop down selection or manually fill out if not applicable"

  ElseIf cc.Title = "ComboBox2" And cc.Range.Text = "TMS backup" Then
  TextBox2.Value = "The TMS installation directory, settings directory and the database was backed up before the update was performed"

  ElseIf cc.Title = "ComboBox2" And cc.Range.Text = "TMS installation" Then
  TextBox2.Value = "Installation of version 1.17.X.19XXX performed"

  ElseIf cc.Title = "ComboBox2" And cc.Range.Text = "TMS update" Then
  TextBox2.Value = "Update from version 1.16.X.XXXXX to version 1.17.X.19XXX performed"

  ElseIf cc.Title = "ComboBox2" And cc.Range.Text = "Tool presetter update" Then
  TextBox2.Value = "Update from version 1.16.X.XXXXX to version 1.17.X.19XXX performed"

  ElseIf cc.Title = "ComboBox2" And cc.Range.Text = "Database generated" Then
  TextBox2.Value = "Database structure created with version 1.17.0"

Как я могу сделать выше, используя текст Контент управления?

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Лучшим подходом было бы:

Private Sub Document_ContentControlOnExit(ByVal Ctrl As ContentControl, Cancel As Boolean)
Dim i As Long, StrDetails As String
With Ctrl
  If .Title = "ComboBox1" Then
  If ShowingPlaceholderText = True Then
    StrDetails = ""
  Else
    For i = 1 To .DropdownListEntries.Count
      If .DropdownListEntries(i).Text = .Range.Text Then
        StrDetails = .DropdownListEntries(i).Value
        Exit For
      End If
    Next
  End If
  ActiveDocument.SelectContentControlsByTitle("TextBox1")(1).Range.Text = StrDetails
  End If
End With
End Sub

Чтобы это работало, просто добавьте свой «условный» текст к свойству «Значение» каждой записи и сделайте текст заполнителя элемента управления содержимым «TextBox1» любым, каким вы хочу, чтобы его подсказка была. Таким образом, вам не нужно жестко кодировать ни опцию выпадающего меню, ни «условный» текст в вашем коде VBA. Для практической демонстрации см .: https://www.msofficeforums.com/word-vba/16498-multiple-entries-dropdown-lists.html#post46903

PS: Вы действительно должны отказаться от стандартных соглашений об именах ActiveX и дать своим элементам управления контентом значимые заголовки.

1 голос
/ 19 февраля 2020

Попробуйте установить текстовое поле:

Sub SetContentcontrolText()
    Dim oRange As Range
    Dim cc As ContentControl
    For Each cc In ActiveDocument.ContentControls
        If cc.Title = "ComboBox1" And cc.Range.Text = "Choose an item." Then
            Set oRange = ActiveDocument.SelectContentControlsByTitle("TextBox1")(1).Range
            oRange.Text = "Please make a drop down selection or manually fill out if not applicable"
        End If
    Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...