0
我想讓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等)解決它,而不會丟失格式?
你需要測試速度更快,使用查找或循環文檔的字符。應該可以像ActiveDocument.Characters中的For Each c一樣來「走動」文檔中的每個字符。但問題仍然是如何識別角色及其替代品。如果您知道西里爾文字符的Unicode編號,那麼您可以測試該編號並「查找」等價物。例如,「sh」字符:如果Chr(c.Text)= 1064 Then'並且在這裏調用一個返回「sh」的函數,該函數將寫入文檔。 –
我知道如何走ActiveDocument.Characters,但不知道替換它的內容? –
基於我之前評論中的代碼片斷,使用對象c:c.Text =「sh」。在考慮它時,如果用多個字符替換單個字符,可能會導致Word的混淆。在後臺編寫第二個文檔可能有意義,而不是在工作時更改原始文檔... –