Создайте поле управления форматированным текстом в VBA для Word 2010

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

Мне нужно жестко закодировать поле ввода текста формы в код VBA. Как это достигается? Или может кто-то указать мне в правильном направлении?

В следующем фрагменте кода мне нужно заменить [InputField] полем ввода VBA.

ActiveDocument.SelectContentControlsByTitle("Bottom").Item(1).Range.Text = _
"Some Text" & vbNewLine & _
"Some Text" & vbNewLine & _
"Some Text" & vbNewLine & _
"Text [InputField] Text"

person mkn    schedule 29.09.2012    source источник


Ответы (1)


Я не уверен, что вы подразумеваете под полем ввода VBA. Я думаю, вы имеете в виду «Поле ввода формы»? Если это так, это, вероятно, решение вашей проблемы:

Sub TestInsertContentControl()
    Dim m_objRange                      As Range
    Dim m_objRangeInsertTextInput       As Range
    Dim m_objFormField                  As FormField

    Set m_objRange = ActiveDocument.SelectContentControlsByTitle("Bottom").Item(1).Range
    m_objRange.Text = "Some Text" & vbNewLine & _
    "Some Text" & vbNewLine & _
    "Some Text" & vbNewLine & _
    "Text  "

    Set m_objRangeInsertTextInput = m_objRange
    m_objRangeInsertTextInput.Start = m_objRange.End - 1
    m_objRangeInsertTextInput.End = m_objRange.End

    Set m_objFormField = m_objRangeInsertTextInput.FormFields.Add(Range:=m_objRange, Type:=wdFieldFormTextInput)

    m_objRangeInsertTextInput.Start = m_objFormField.Range.End
    m_objRangeInsertTextInput.End = m_objFormField.Range.End
    m_objRangeInsertTextInput.Text = " Some more Text"
End Sub
person Bruno Bieri    schedule 29.09.2012
comment
Используя ваш код, я не вижу поля ввода формы. Кроме того, у меня проблема с тем, что у меня есть «текст [forminput] text», а не только «text [forminput]». - person mkn; 29.09.2012
comment
Как я уже писал, я не уверен, что вы подразумеваете под InputField. Вы можете проверить, есть ли поле ввода формы, нажав ALT+F9. Смотрите мой отредактированный ответ «текст [forminput] text». - person Bruno Bieri; 29.09.2012
comment
работает очень хорошо спасибо. Знаете ли вы, как я могу установить заголовок (идентификатор, чтобы я мог получить доступ к этому полю через ActiveDocument.SelectContentControlsByTitle(myField) и как я могу установить серый текст по умолчанию, который удаляется, когда пользователь щелкает? Мне нужно получить доступ к этому полю над vba, потому что «нижний» контент заблокирован, и поэтому мне нужно удалить блокировку определенного поля ввода формы - person mkn; 30.09.2012
comment
Я не понимаю, что именно вам нужно. Поле в приведенном выше коде, как вставляется, является полем ввода формы. FormInputFields не имеет заголовка или идентификатора для установки. У них также нет серого текста по умолчанию для установки. Вам нужен ContentControl внутри вашего нижнего ContentControl? Можете ли вы задать новый вопрос и опубликовать ссылку здесь. - person Bruno Bieri; 30.09.2012