Я хочу сделать макросы в VBA, переведя кириллические буквы в латинские буквы.
В настоящее время я используюзаменить кириллические буквы на латинские
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "Ш" 'cyrillic letter
.Replacement.Text = "Sh" 'latin letter
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
и повторить его для всех букв. Этот метод работает. Но он очень медленно работает с большим документом, потому что более 50 раз вызывает Selection.Find.Execute.
Вопрос: Могу ли я решить его быстрее? Например, что-то вроде
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^$" 'Finds any letter
.Replacement.Text = "\\1" ' ---> There I don't know how retrieve
' found letter
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Или я могу решить это с другим способом (Application.ActiveDocument.Characters или Application.ActiveDocument.Words и т.д.), не потерять форматирование?
Вы должны были бы проверить, что быстрее, с помощью функции поиска или перекручивание символов документа. Должно быть возможно сделать что-то вроде «Для каждого c в ActiveDocument.Characters» для «ходьбы» каждого символа в документе. Но проблема остается в том, как идентифицировать персонажей и их замены. Если вы знаете номер юникода для кириллических символов, вы можете проверить это число и «найти» эквивалент. Например, символ «sh»: если Chr (c.Text) = 1064 Then », и здесь вызывается функция, которая возвращает« sh », которую вы пишете в документе. –
Я знаю, как гулять с ActiveDocument.Characters, но не знаю, замените его содержимое? –
Основываясь на фрагменте в моем предыдущем комментарии, используя объект c: c.Text = "sh". Подумав об этом, это может запутать Word, когда вы заменяете один символ несколькими символами. Возможно имеет смысл написать второй документ в фоновом режиме, вместо того, чтобы изменять оригинал во время работы ... –