Estou tentando usar o Visual Basic no Word para automatizar uma MailMergeDataSource
pesquisa de documento seguida por uma executada MailMerge
. Tenho ambas as etapas trabalhando independentemente. No entanto, se eu chamar a SearchForDocument()
função primeiro, ela ExecuteMerge()
falha. Recebo um erro de tempo de execução '5631': o Word não pôde mesclar o documento principal com a fonte de dados porque os registros de dados estavam vazios ou nenhum registro de dados correspondia às suas opções de consulta.
Posso executar a SearchForDocument()
função e anotar o número do registro. Então, se eu fechar o Word e reabrir sem salvar, posso chamar o ExecuteMerge()
naquele número de registro com sucesso.
Tentei redefinir .ActiveRecord
para 1, mas sem sucesso.
Esta função VB pesquisa uma fonte de dados para um doc_id
, e retorna o número do registro do conjunto de dados. Ela funciona sem problemas aparentes. Retorna um número de registro preciso do conjunto de dados.
Function SearchForDocument(doc_id As String)
' Searches datasource for given record id number.
Dim dsMain As MailMergeDataSource
Dim numRecord As Integer
ActiveDocument.MailMerge.ViewMailMergeFieldCodes = False
Set dsMain = ActiveDocument.MailMerge.DataSource
'Initializes at first record because .ActiveRecord method only searches for first match in descending records from current record
dsMain.ActiveRecord = 1
If dsMain.FindRecord(FindText:=doc_id, Field:="SAMPLE") = True Then
numRecord = dsMain.ActiveRecord
Else
MsgBox "Record " & doc_id & " was not found."
numRecord = 0
End If
SearchForDocument = numRecord
End Function
Esta função executa MailMerge
a partir de um número de registro fornecido de um conjunto de dados. Ela funciona bem, a menos que eu execute a SearchForDocument
função primeiro. Quando falha, recebo o erro de tempo de execução '5631'.
Function ExecuteMerge(ByVal TargetRecord As Integer)
Set myMerge = ActiveDocument.MailMerge
If myMerge.State = wdMainAndSourceAndHeader Or _
myMerge.State = wdMainAndDataSource Then
With myMerge.DataSource
.FirstRecord = TargetRecord
.LastRecord = TargetRecord
End With
End If
With myMerge
.Destination = wdSendToNewDocument
.Execute
End With
End Function