2016-06-27 1 views
2

docx 파일을 비교하고 델타를 저장하는 VBA 루틴을 작성했습니다. 델타에서 TrackFormatting을 비활성화해야하지만 추가하면 .trackFormatting = False은 아무 것도하지 않습니다. compare 메서드에서 CompareFormatting도 false입니다! 어떻게해야합니까?서식 변경 내용을 추적하지 않고 Word 문서 비교

Sub ProduceDeltas() 
    Dim strFolderA As String 
    Dim strFolderB As String 
    Dim strFolderC As String 
    Dim strFileSpec As String 
    Dim strFileName As String 
    Dim objDocA As Word.Document 
    Dim objDocB As Word.Document 
    Dim objDocC As Word.Document 
    Dim dc As Word.Document 
    Dim FldrPickerInputA As FileDialog 
    Dim FldrPickerInputB As FileDialog 
    Dim FldrPickerOutput As FileDialog 
    Application.ScreenUpdating = False 
    Set FldrPickerInputA = Application.FileDialog(msoFileDialogFolderPicker) 
    Set FldrPickerInputB = Application.FileDialog(msoFileDialogFolderPicker) 
    Set FldrPickerOutput = Application.FileDialog(msoFileDialogFolderPicker) 
With FldrPickerInputA 
    .Title = "Choose first file: " 
    .AllowMultiSelect = False 
    If .Show <> -1 Then GoTo NextCode 
    strFolderA = .SelectedItems(1) & "\" 
    End With 
    With FldrPickerInputB 
    .Title = "Choose second file: " 
    .AllowMultiSelect = False 
    If .Show <> -1 Then GoTo NextCode 
    strFolderB = .SelectedItems(1) & "\" 
    End With 
    With FldrPickerOutput 
    .Title = "Choose output file: " 
    .AllowMultiSelect = False 
    If .Show <> -1 Then GoTo NextCode 
    strFolderC = .SelectedItems(1) & "\" 
End With 

NextCode: 
strFolderA = strFolderA 
strFolderB = strFolderB 
strFolderC = strFolderC 
If strFolderA = "" Then GoTo ResetSettings 
strFileSpec = "*.docx" 
strFileName = Dir(strFolderA & strFileSpec) 
Do While strFileName <> vbNullString 
Set objDocA = Documents.Open(strFolderA & strFileName) 
Set objDocB = Documents.Open(strFolderB & strFileName) 
If objDocA.TablesOfContents.Count = 1 Then _ 
    objDocA.TablesOfContents(1).Update 
If objDocB.TablesOfContents.Count = 1 Then _ 
    objDocB.TablesOfContents(1).Update 
Set dc = Application.CompareDocuments(objDocA, objDocB,   wdCompareDestinationNew, _ 
    Granularity:=wdGranularityWordLevel, _ 
    CompareFormatting:=False, RevisedAuthor:="IQTIG",  CompareFootnotes:=False, CompareHeaders:=False) 

dc.TrackFormatting = False 
objDocA.Save 
objDocB.Save 
objDocA.Close 
objDocB.Close 

If dc.TablesOfContents.Count = 1 Then _ 
dc.TablesOfContents(1).Update 

dc.SaveAs strFolderC & strFileName 
dc.Close SaveChanges:=False 
strFileName = Dir 
Loop 

Set objDocA = Nothing 
Set objDocB = Nothing 

ResetSettings: 
Application.ScreenUpdating = True 
End Sub 

답변

1

어떤 버전의 Word? Word 2013에서 CompareFormatting:=False이 저에게 효과적입니다.

한 가지 옵션은 비교를 실행 한 후 모든 서식 지정 버전을 수락 (또는 거부)하는 것입니다. dc.SaveAs하기 전에 다음 삽입 : (. 어떠한 보증과 같이 코드, Lene Fredborg에 의해 ExtractTrackedChangesToNewDoc에서 수정 제공)

dim oRevision as Revision 
For Each oRevision In dc.StoryRanges(wdMainTextStory).Revisions 
    If (oRevision.Type<> wdRevisionInsert) and (oRevision.type <> wdRevisionDelete) then 
     oRevision.Accept ' or .Reject 
    End If 
Next oRevision