#vba #replace #ms-word
Вопрос:
Нужна твоя помощь. И я заранее знаю, что встроенная функция «CTRL H» должна дать соответствующий ответ-но в моем случае это не так. Из — за проблем с языком текста и из-за того, что у меня много символов, которые не являются «буквами или цифрами», обычный поиск и замена вызывают ошибки.
А теперь за просьбу — и большое — большое спасибо заранее!
Я смог «очистить» и переработать относительно простой код, который выполняет поиск и замену всего документа, к которому я смог подключить MSGBOX для подтверждения запросов на каждую замену:
Кнопка «ОК» — подтверждает однократную замену. Кнопка «Нет» — пропускает этот поиск — и не переключается. Кнопка «Отмена» — останавливает макрос.
- Как вы добавляете четвертую кнопку, которая будет выполнять «Заменить все»?
- Существует ли опция «обратного отсчета» для запуска без вмешательства пользователя? Я хочу, чтобы по умолчанию было «Ок», и даже если я не нажимал, то через 3 секунды — будет внесено изменение.
- Я ломал голову в течение многих дней — и не могу преобразовать этот код, который будет работать только в выделенном / отмеченном тексте.
ВОТ КОД, КОТОРЫЙ Я ИСПОЛЬЗУЮ
Sub Want2Replace()
Dim myRange As Range
Set myRange = ActiveDocument.Content
myRange.Find.ClearFormatting
myRange.Find.MatchWildcards = True
Dim cached As Long
cached = myRange.End
Do While myRange.Find.Execute("åÀ")
myRange.Select
MyAnswer = MsgBox("Replace " amp; myRange.Find.Text amp; "?", vbYesNoCancel)
If MyAnswer = vbYes Then Call Shva_Na
If MyAnswer = vbCancel Then Exit Sub
myRange.Start = myRange.Start Len(myRange.Find.Text)
myRange.End = cached
Loop
End Sub
Комментарии:
1. Вы не можете добавлять кнопки в окно сообщения. Вы можете использовать только стандартные опции.
2. Вы можете создать форму пользователя для большей гибкости/мощности. gmayor.com/Userform.htm
3. Окно сообщения не может дать вам кнопки! Вы изучали возможность использования формы пользователя?
Ответ №1:
В зависимости от ваших требований вы можете написать вторую функцию с помощью replaceAll или адаптировать свою функцию в соответствии с ожиданиями пользователей.
Вы также можете добавить еще один MsgBox, который запрашивает замену всех.
Таким образом, вы должны решить и ответить себе на вопрос, действительно ли пользователь хочет ReplaceAll
и/или одна Replace
специальная функция является дополнительной функцией.
Комментарии:
1. Большое вам спасибо за все ответы. Как уже упоминалось, сложность заключается в том, что иногда замена удаляет дополнительные символы, которые были «проглочены» в результате поиска. Этот вопрос должен оставаться открытым: есть ситуации, когда пользователь заранее знает, что он позволяет себе «Заменить все», и ожидается, что он не будет удивлен, и есть ситуации, когда он предпочитает проверить несколько случаев, и только затем переключиться на использование «Заменить все».