Com a ajuda do forum criei um código para guardar relatório em PDF, imprimir a quantidade de cópias desejadas e enviar o PDF por email via Microsoft Outlook.
Convém a conta Outlook estar aberta.
Este é o código que utilizo, adaptem e usem:
Private Sub Comando697_Click()
Dim strArquivo As String
Dim strLocal As String
Dim objOut As Object
Dim objmail As Object
Dim objAnexo As Object
Const olMailItem = 0
Const olByValue = 1
'---------------------------------------------
'Carregando a coleção do Outlook
'Similar ao abrir o Outlook
'---------------------------------------------
Set objOut = CreateObject("Outlook.application")
'------------------------------------------------------------
'Abrindo o formulário de email para inserir os itens de email
'Similar ao clicar no botão NOVO do Outlook
'------------------------------------------------------------
Set objmail = objOut.CreateItem(olMailItem)
'------------------------------------------------------------
'Abrindo a opção anexo
'Similar ao clicar no botão ANEXO do Outlook
'------------------------------------------------------------
Set objAnexo = objmail.Attachments
'---------------------------------------------------------------------------------
'Indico o nome do arquivo pdf e o local que será gravado
'O local que escolhi para gravar os arquivos de pdf gerados
'é na pasta enviados, aonde se encontra o aplicativo.
'Neste exemplo, gero os nomes dos arquivos, aproveitando o número exclusivo
'do cliente. Então os arquivos vão ficar com o aspecto: rlt1.pdf, rlt2.pdf, ...
'É claro que vc poderá gerar o nome que achar mais conveniente.
'---------------------------------------------------------------------------------
strArquivo = Replace(Me!cam7, "/", "_") & " _ " & Me![001] & ".pdf"
strLocal = CurrentProject.Path & "\Oficios\Oficios Expedidos\" & strArquivo
'Salvando alterações no registro
If Me.Dirty Then DoCmd.RunCommand acCmdSaveRecord
'----------------------------------------------------------------------------
'Abre o relatório filtrado e oculto de acordo com o cliente selecionado.
'----------------------------------------------------------------------------
DoCmd.OpenReport "Oficio Normal1", acViewPreview, , "[001] = " & [001], acHidden
'----------------------------------------------------------------------------------------
'gero o pdf do relatório através do comando outputto.
'o mecanismo do Access reconhece que o relatório solicitado pelo outputto já está aberto
'e então o outputto usará o relatório já aberto e filtrado.
'-----------------------------------------------------------------------------------------
DoCmd.OutputTo acOutputReport, "Oficio Normal1", acFormatPDF, strLocal
Dim numCop As Integer
numCop = InputBox("Informe a quantidade de cópias: ", "IMPRIMIR") 'Valor este que pode ser obtido por outro meios
DoCmd.PrintOut acPrintAll, , , acHigh, numCop 'Linha simplificada para a impressão
'-------------------------------------------
'fecha o relatório clientes que está oculto
'-------------------------------------------
DoCmd.Close acReport, "Oficio Normal1"
'--------------------------------------------------------
'adiciona o arquivo pdf no anexo
'-------------------------------------------------------
objAnexo.Add strLocal, olByValue, 1
'-----------------------------------------------------------------
'Mostra a tela de sáida de email que abrimos
'-----------------------------------------------------------------
objmail.Display
'-------------------------------------------------------
'Tudo já foi entregue ao outlook, então podemos esvaziar
'a memoria do computador usada pelas variáveis
'-------------------------------------------------------
Set objAnexo = Nothing
Set objmail = Nothing
Set objOut = Nothing
End Sub
Convém a conta Outlook estar aberta.
Este é o código que utilizo, adaptem e usem:
Private Sub Comando697_Click()
Dim strArquivo As String
Dim strLocal As String
Dim objOut As Object
Dim objmail As Object
Dim objAnexo As Object
Const olMailItem = 0
Const olByValue = 1
'---------------------------------------------
'Carregando a coleção do Outlook
'Similar ao abrir o Outlook
'---------------------------------------------
Set objOut = CreateObject("Outlook.application")
'------------------------------------------------------------
'Abrindo o formulário de email para inserir os itens de email
'Similar ao clicar no botão NOVO do Outlook
'------------------------------------------------------------
Set objmail = objOut.CreateItem(olMailItem)
'------------------------------------------------------------
'Abrindo a opção anexo
'Similar ao clicar no botão ANEXO do Outlook
'------------------------------------------------------------
Set objAnexo = objmail.Attachments
'---------------------------------------------------------------------------------
'Indico o nome do arquivo pdf e o local que será gravado
'O local que escolhi para gravar os arquivos de pdf gerados
'é na pasta enviados, aonde se encontra o aplicativo.
'Neste exemplo, gero os nomes dos arquivos, aproveitando o número exclusivo
'do cliente. Então os arquivos vão ficar com o aspecto: rlt1.pdf, rlt2.pdf, ...
'É claro que vc poderá gerar o nome que achar mais conveniente.
'---------------------------------------------------------------------------------
strArquivo = Replace(Me!cam7, "/", "_") & " _ " & Me![001] & ".pdf"
strLocal = CurrentProject.Path & "\Oficios\Oficios Expedidos\" & strArquivo
'Salvando alterações no registro
If Me.Dirty Then DoCmd.RunCommand acCmdSaveRecord
'----------------------------------------------------------------------------
'Abre o relatório filtrado e oculto de acordo com o cliente selecionado.
'----------------------------------------------------------------------------
DoCmd.OpenReport "Oficio Normal1", acViewPreview, , "[001] = " & [001], acHidden
'----------------------------------------------------------------------------------------
'gero o pdf do relatório através do comando outputto.
'o mecanismo do Access reconhece que o relatório solicitado pelo outputto já está aberto
'e então o outputto usará o relatório já aberto e filtrado.
'-----------------------------------------------------------------------------------------
DoCmd.OutputTo acOutputReport, "Oficio Normal1", acFormatPDF, strLocal
Dim numCop As Integer
numCop = InputBox("Informe a quantidade de cópias: ", "IMPRIMIR") 'Valor este que pode ser obtido por outro meios
DoCmd.PrintOut acPrintAll, , , acHigh, numCop 'Linha simplificada para a impressão
'-------------------------------------------
'fecha o relatório clientes que está oculto
'-------------------------------------------
DoCmd.Close acReport, "Oficio Normal1"
'--------------------------------------------------------
'adiciona o arquivo pdf no anexo
'-------------------------------------------------------
objAnexo.Add strLocal, olByValue, 1
'-----------------------------------------------------------------
'Mostra a tela de sáida de email que abrimos
'-----------------------------------------------------------------
objmail.Display
'-------------------------------------------------------
'Tudo já foi entregue ao outlook, então podemos esvaziar
'a memoria do computador usada pelas variáveis
'-------------------------------------------------------
Set objAnexo = Nothing
Set objmail = Nothing
Set objOut = Nothing
End Sub