MS Word: замена текста закладки в пользовательской форме вместо добавления с использованием VBA - PullRequest
0 голосов
/ 15 ноября 2018

VBA Новичок здесь.

Я только что создал форму пользователя, которая позволяет моей команде создать сопроводительное письмо.

Кнопка ниже появляется в теле документа в разделе «Инструкция». Когда они нажимают на нее, она показывает мою форму, которую они должны заполнить.

Private Sub EditFormButt_Click()
    CoverLetterForm.Show
End Sub

Форма в настоящее время имеет предварительно заполненный текст заполнителя. Я хочу, чтобы моя команда смогла заменить текст. Прямо сейчас, что происходит, когда они нажимают мою кнопку «ОК» (код, который следует), текст-заполнитель остается, и их новый текст добавляется.

Например:

Кому: мистер Пол Дэниелс Г-жа. Сара Джонс
21 New Order Street
Лондон
Англия

Уважаемый мистер Пол Дэниелс Г-жа. Сара Джонс

Ms. Сара Джонс - текст заполнителя, мистер Пол Дэниелс - обновленный текст.

Мне нужны новые записи для замены того, что есть в тексте заполнителя, но не для удаления чего-либо, что не было обновлено, так как иногда они могут захотеть изменить только имя получателя, но не адрес человека. Это также полезно, если они хотят исправить ошибки, допущенные при написании, без необходимости начинать совершенно новый документ.

Вот мой код OKButt:

Private Sub OKButt_Click()
    Dim bmRecName As Range
    Set bmRecName = ActiveDocument.Bookmarks("bmRecName").Range
    bmRecName.Text = Me.RecName.Value
    Dim bmRecAddress As Range
    Set bmRecAddress = ActiveDocument.Bookmarks("bmRecAddress").Range
    bmRecAddress.Text = Me.RecAddress.Value
    CoverLetterForm.Hide
End Sub

Спасибо за вашу помощь:)

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Simpler:

Private Sub OKButt_Click()
Dim bmRng As Range
With ActiveDocument
  Set bmRng = .Bookmarks("bmRecName").Range
  bmRng.Text = Me.RecName.Value
  .Bookmarks.Add "bmRecName", bmRng
  Set bmRng = .Bookmarks("bmRecAddress").Range
  bmRng.Text = Me.RecAddress.Value
  .Bookmarks.Add "bmRecAddress", bmRng
  CoverLetterForm.Hide
End With
End Sub
0 голосов
/ 15 ноября 2018

Хорошо, я думаю, что нашел ответ, но если у кого-то есть более изящное решение, я весь в ушах!

Private Sub OKButt_Click()
    Dim bmRecName As Range
    Set bmRecName = ActiveDocument.Bookmarks("bmRecName").Range
    bmRecName.Text = Me.RecName.Value
    ActiveDocument.Bookmarks.Add "bmRecName", bmRecName
    Dim bmRecAddress As Range
    Set bmRecAddress = ActiveDocument.Bookmarks("bmRecAddress").Range
    bmRecAddress.Text = Me.RecAddress.Value
    ActiveDocument.Bookmarks.Add "bmRecAddress", bmRecAddress
    CoverLetterForm.Hide
End Sub

В основном добавляю следующий код:

ActiveDocument.Bookmarks.Add "bmRecAddress", bmRecAddress
...