В нашей организации мы отправляем документы для комментариев, а затем объединяем их так, что все комментарии можно сначала просмотреть вместе в одном документе, а затем выборочно принять.Зачастую эти документы достаточно велики (> 1 МБ), и нередко объединяются наборы из 5-10 документов.Часто слияние множества больших документов не удается, то есть первые два документа группы были объединены, но третий и последующие документы отсутствуют в конечном результате.
После некоторых экспериментов мы пришли к«верьте», что проблема заключается в коде, который перебирает набор файлов для объединения.
Private Sub standardMerge(files() As String)
Dim i As Integer
Dim file0 As String: file0 = files(0)
For i = 1 To UBound(files)
DoEvents
Word.Documents.Open fileName:=files(i), ReadOnly:=False, addtorecentfiles:=False
Application.MergeDocuments _
OriginalDocument:=Documents(files(i)), RevisedDocument:=Documents(file0), _
Destination:=wdCompareDestinationRevised, _
Granularity:=wdGranularityCharLevel, _
CompareFormatting:=True, CompareCaseChanges:=True, CompareWhitespace:=True, _
CompareTables:=True, CompareHeaders:=True, CompareFootnotes:=True, _
CompareTextboxes:=True, CompareFields:=True, CompareComments:=True, _
FormatFrom:=wdMergeFormatFromRevised, CompareMoves:=True
DoEvents
snooze 5
Documents(files(i)).Close False
DoEvents
Next i
End Sub
Поскольку документы большие, мы представляем, что Word запускает процессы для выполнения отдельных слияний.Один процесс запускается до того, как предыдущий будет полностью завершен, поэтому последующие слияния завершаются неудачно.
Мы добавили функцию «snooze» для задержки Word между итерациями.Это, кажется, помогло, но это решение действительно просто пинает банку в будущем.Неясно, действительно ли это проблема или действительно решение.Функция откладывания - это обычный вызов Windows API.
Public Sub snooze(arg As Long)
Dim i As Long
Dim a As Long: a = arg * 1000
Word.Application.StatusBar = "Snooze for " & arg & " seconds"
For i = 0 To a / 250
Sleep 250
Next i
End Sub
Является ли это хотя бы правдоподобным объяснением проблемы сбоя при слиянии без вывода сообщений?
Есть ли лучшее решение этой проблемы, котороене полагается на слепое торможение в задержке?