2017-02-02 2 views
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를 호출하기 때문에 큰 문서에서는 매우 느리게 작동합니다.

Q : 더 빨리 해결할 수 있습니까? 예를 들어 , 잃게 형식없이

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)로 해결할 수있는 뭔가?

+0

찾기를 사용하거나 문서의 문자를 반복, 빨리되는 테스트해야하는 것입니다. ActiveDocument.Characters의 For Each c와 같이 문서의 각 문자를 "걷는"것과 같은 작업을 수행 할 수 있어야합니다. 그러나 문제는 문자와 그 대체물을 식별하는 방법으로 남아 있습니다. 당신이 키릴 문자에 대한 유니 코드 번호를 알고 있다면 해당 번호를 테스트하고 해당 번호를 "검색"할 수 있습니다. 예를 들어 "sh"문자 : Chr (c.Text) = 1064 If '여기에'sh '를 반환하는 함수를 호출합니다.이 함수는 문서에 씁니다. –

+0

나는 ActiveDocument.Characters를 걷는 방법을 알고 있지만 내용을 바꾸지는 모른다. –

+0

개체 c : c.Text = "sh"를 사용하여 이전 주석의 스 니펫에 빌드하십시오. 그것에 대해 생각하면 여러 문자로 한 문자를 바꿀 때 Word에 혼동을 줄 수 있습니다. 작업하는 동안 원본을 변경하는 대신 배경에 두 번째 문서를 작성하는 것이 좋습니다 ... –

답변

0

이 내가 사용하는 것이 무엇 : 가능하면

  1. 이 선택을 제거하고 범위로 설정합니다.

  2. 화면 업데이트를 사용 중지하면 더 좋을 것입니다.

    Sub Replacer() 
    
    Dim rng1 As Range 
    
    call onstart 
    
    Set rng1 = Activedocument.Range 
    
    With rng1.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 
    
    call onend 
    
    End Sub 
    
    Public Sub OnEnd() 
    
    Application.ScreenUpdating = True 
    Application.DisplayAlerts = True 
    Application.StatusBar = False 
    
    End Sub 
    
    Public Sub OnStart() 
    
    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 
    
    End Sub