Segue a rotina completa abaixo:
Private Sub BtWord_Click()
'AUTORIA: Criquio - Fórum Máximo Access, com adaptações
'OBRIGATÓRIO: Marcar Referência: Microsoft Word 11.0 Object Library
' Marcar Referência: Microsoft Scripting Runtime
Dim ntram
ntram = MsgBox("Deseja GERAR um novo Documento WORD ?" & vbCr & "ALERTA: Caso já tenha sido gerado o Ofício anterior será substituído pelo Arquivo-Matriz.", vbQuestion + vbYesNo, "Sistema - Confirmação")
If ntram = 6 Then 'INÍCIO 1º IF
#Const DESENV = -1
On Error GoTo TrataErro
Dim oApp As Object 'Cria uma variável objeto
Dim strSql As String
'Habilite a Referencia Microsoft Scripting Runtime
'By JPaulo ® Maximo Access
Dim Pasta As String
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FolderExists("L:\SIACAP\01.Oficios\" & Year(DataOficio)) Then ' verifica se já existe a pasta
'Não faz nada
Else
'cria a pasta em falta para o ano em causa
MkDir "L:\SIACAP\01.Oficios\" & Year(DataOficio) ' se não existir cria
End If
Pasta = "L:\SIACAP\01.Oficios\" & Year(DataOficio)
'Inicia o MS Word
Set oApp = CreateObject("Word.Application") 'Cria e abre o objeto Word
With oApp
'Torna o MS Word visível
Visible = True
'Abre o documento base
.Documents.Open ("L:\SIACAP\01.Oficios\MatrizOficio1.doc")
'Move cada campo para o indicador definido no documento
.ActiveDocument.Bookmarks("Campo01").Select
.Selection.Text = "\" & (CStr(Forms!F13_Oficios!SiglaSetor)) & "\Nº " & (CStr(Forms!F13_Oficios!Num4Oficio) & "/" & Year(DataOficio)) ' TESTE: OK
'.Selection.Text = "\" & (CStr(Forms!F13_Oficios!SiglaSetor)) & "\Nº " & (CStr(Forms!F13_Oficios!NumOficio)) ' ORIGINAL
.ActiveDocument.Bookmarks("Campo02").Select
.Selection.Text = (Format(Forms!F13_Oficios!DataOficio, "dd")) & " de " & (Format(Forms!F13_Oficios!DataOficio, "mmmm")) & " de " & (Format(Forms!F13_Oficios!DataOficio, "yyyy"))
.ActiveDocument.Bookmarks("Campo03").Select
.Selection.Text = (CStr(Forms!F13_Oficios!Tratamento))
.ActiveDocument.Bookmarks("Campo04").Select
.Selection.Text = (CStr(Forms!F13_Oficios!TextoOficio1))
.ActiveDocument.Bookmarks("Campo05").Select
.Selection.Text = (CStr(Forms!F13_Oficios!TextoOficio2))
.ActiveDocument.Bookmarks("Campo06").Select
.Selection.Text = (CStr(Forms!F13_Oficios!TextoOficio3))
.ActiveDocument.Bookmarks("Campo07").Select
.Selection.Text = (CStr(Forms!F13_Oficios!NomeEmitente))
.ActiveDocument.Bookmarks("Campo08").Select
.Selection.Text = (CStr(Forms!F13_Oficios!CargoEmitente))
.ActiveDocument.Bookmarks("Campo09").Select
.Selection.Text = (CStr(Forms!F13_Oficios!FuncaoEmitente))
.ActiveDocument.Bookmarks("Campo10").Select
.Selection.Text = (CStr(Forms!F13_Oficios!Tratamento))
.ActiveDocument.Bookmarks("Campo11").Select
.Selection.Text = (CStr(Forms!F13_Oficios!NomeDestinatario))
.ActiveDocument.Bookmarks("Campo12").Select
.Selection.Text = (CStr(Forms!F13_Oficios!CargoDestinatario))
.ActiveDocument.Bookmarks("Campo13").Select
.Selection.Text = (CStr(Forms!F13_Oficios!OrgaoDestinatario))
.ActiveDocument.Bookmarks("Campo14").Select
.Selection.Text = (CStr(Forms!F13_Oficios!DestinoEndereco)) & ", " & (CStr(Forms!F13_Oficios!DestinoCidade))
.ActiveDocument.Bookmarks("Campo15").Select
.Selection.Text = "CEP: " & (Format(Forms![F13_Oficios]![DestinoCEP], "00\.000\-000"))
.ActiveDocument.Bookmarks("Campo16").Select
.Selection.Text = "\" & (CStr(Forms!F13_Oficios!SiglaSetor)) & "\Nº " & (CStr(Forms!F13_Oficios!Num4Oficio) & "/" & Year(DataOficio))
.ActiveDocument.Bookmarks("Campo17").Select
.Selection.Text = (Format(Forms!F13_Oficios!DataOficio, "dd")) & " de " & (Format(Forms!F13_Oficios!DataOficio, "mmmm")) & " de " & (Format(Forms!F13_Oficios!DataOficio, "yyyy"))
.ActiveDocument.Bookmarks("Campo18").Select
.Selection.Text = (CStr(Forms!F13_Oficios!NomeEmpresa))
.ActiveDocument.Bookmarks("Campo19").Select '** RECOLOCADO APÓS TESTES
.Selection.Text = (CStr(Forms!F13_Oficios!NroArquimedes)) '** RECOLOCADO APÓS TESTES
'AUTOR: Alexandre Neves - Fórum MáximoAccess (31/07/2012) - FUNCIONOU. Fiz alterações nas linhas xxx e xxx para ficar apenas com 1 campo "NumAutoNovo"
Dim Rst As DAO.Recordset, Infraccao As String
Set Rst = CurrentDb.OpenRecordset("SELECT NumAutoNovo FROM (T15_Empresas LEFT JOIN T16_Expedientes ON T15_Empresas.CodEmpresa=T16_Expedientes.IDEmpresa) LEFT JOIN T161_AutosInfracao ON T16_Expedientes.CodExpediente=T161_AutosInfracao.IDExpediente WHERE CodExpediente=" & IDExpediente)
Infraccao = ""
Do While Not Rst.EOF
If Infraccao = "" Then Infraccao = Rst(0) Else Infraccao = Infraccao & vbCr & Rst(0)
Rst.MoveNext
Loop
Set Rst = Nothing
.ActiveDocument.Bookmarks("Campo20").Select
.Selection.Text = Infraccao
'Salva o arquivo gerado
.ActiveDocument.SaveAs Pasta & "\" & "Oficio " & Replace(Me.NumOficio, "/", "-") & ".doc" 'ORIGINAL
'Fecha o documento
.ActiveDocument.Close
End With
'Fecha o Word
oApp.Quit
End If 'FIM 1º IF
Dim X As String
X = Pasta & "\Oficio " & Replace(Me.NumOficio, "/", "-") & ".doc" 'ORIGINAL
Dim Word As New Word.Application
With Word
.Documents.Open X
.Visible = True
.WindowState = wdWindowStateMaximize
End With
Me.BtWord.Visible = False 'Torna o Controle-Imagem 'BtWord' INVÍSIVEL após fechar o Documento gerado
Me.GeraWord = 2 'Torna Nulo o Campo 'GeraWord' = NÃO, após gerar Word
'Libera a memória
Set oApp = Nothing
Saida:
Exit Sub
TrataErro:
'Se um campo do formulário estiver vazio, remove o texto do Indicador e continua
If Err.Number = 94 Then
oApp.Selection.Text = ""
Resume Next
End If
MsgBox "Form_F13_Oficios - btWord_Click" & vbCrLf & Err.Description, vbExclamation + vbOKOnly, "Erro: " & CStr(Err.Number)
#If DESENV Then
oApp.Quit
Set oApp = Nothing
Stop
Resume
#End If
Resume Saida
Me.BtWord.Visible = False 'Torna o Controle-Imagem 'BtWord' INVÍSIVEL após fechar o Documento gerado
Me.GeraWord = 2 'Torna Nulo o Campo 'GeraWord' = NÃO, após gerar Word
End Sub
OBS: Quando fiz todos os testes mencionados desde o início deste tópico, usei a BD como MDE.