Каждый раз, когда вы перебираете что-то построчно, а затем выполняете какую-то обработку для каждой строки, это будет немного медленным.
Я был бы склонен подойти к этой проблеме, выполнив перед этим шаг, который подготовил коллекцию mdictMergeFields, чтобы в только содержались элементы, которые не были «нулевыми или пустыми», это означает, что вы не будете нужно проверять это на каждой итерации. Вы можете сделать это в процессе или «незаметно» в фоновом режиме, пока пользователь делает что-то еще.
Другая вещь, которую нужно попробовать (может помочь!), Это изменить блок «Do ... Loop», чтобы в конце каждой импортированной строки вы не проверяли, является ли запись «последней записью». Вместо этого получите количество записей, а затем сравните текущий индекс с максимумом знаний (который может быть быстрее)
т.е:.
Dim i, x as Integer
i = ActiveDocument.MailMerge.DataSource.RecordCount
Do While x < i
objXW.WriteStartElement("Recipient")
Dim objDataFields As Word.MailMergeDataFields = DataSource.DataFields
For Each FieldIndex As Integer In mdictMergeFields.Keys
strValue = objDataFields.Item(FieldIndex).Value
If Not String.IsNullOrEmpty(strValue) Then
strName = mdictMergeFields(FieldIndex)
objXW.WriteElementString(strName, strValue)
End If
Next
objXW.WriteEndElement()
x += 1
Loop
Я не особо много работаю с Office Interop, но, надеюсь, это может помочь! Отправить обратно, дайте мне знать, как оно идет.
/ Richard.