Como posso produzir um relatório no formato PDF, onde o nome consiste em valores dos campos?

StackOverflow https://stackoverflow.com/questions/2296884

  •  21-09-2019
  •  | 
  •  

Pergunta

Quero adicionar funcionalidade ao meu relatório Access 2007, pelo qual uma cópia em PDF do relatório é criada com o clique de um botão. Eu sei que existe um OutputTo Macro que pode fazer isso por mim, mas não me permite incluir valores de campo de relatório como parte do nome do arquivo do PDF, a saber:

[Client Organisations].Code + "-" + Clients.Code + "-" + Invoices_Code + "-" + Format([Invoice Date],"yyyy") + ".pdf"

Enquanto eu vi isso MSDN Thread e isto Então pergunta, Não vejo o uso de valores de campo em nenhuma das respostas.

Eu acho que o código VBA é o caminho a percorrer, então (sem sucesso) tentei o seguinte:

Private Sub Create_PDF_Click()
DoCmd.OutputTo acOutputReport, , acFormatPDF, "" + [Client Organisations].Code  
+ "-" + Clients.Code + "-" + Invoices_Code + "-" + Format([Invoice Date],"yyyy")
+ ".pdf", True
End Sub

Erro de tempo de execução '2465':

O acesso ao Microsoft Office não pode encontrar o campo '|' referido em sua expressão

Alguma ideia por aí?

Foi útil?

Solução

Eu consegui funcionar (eventualmente).

A seguir sub fez o truque:

Private Sub Create_PDF_Click()

Dim myPath As String
Dim strReportName As String

DoCmd.OpenReport "Invoices", acViewPreview

myPath = "C:\Documents and Settings\"
strReportName = Report_Invoices.[Client Organisations_Code] + "-" +
Report_Invoices.Clients_Code + "-" + Report_Invoices.Invoices_Code + "-" +
Format(Report_Invoices.[Invoice Date], "yyyy") + ".pdf"

DoCmd.OutputTo acOutputReport, "", acFormatPDF, myPath + strReportName, True
DoCmd.Close acReport, "Invoices"

End Sub

Duas advertências:

  1. O relatório precisa ser aberto antes da impressão.
  2. Consulte os campos com o mesmo nome que o relatório o vê. Este [Client Organisations].Code foi [Client Organisations_Code] no relatório.

Outras dicas

É mais fácil diminuir uma string e colocar toda a sua expressão lá e, em seguida, depurar -a para ver se ela contém o nome do relatório válido.

Assim:

Dim strReportName as String

strReportName = [Client Organisations].Code   
+ "-" + Clients.Code + "-" + Invoices_Code + "-" + Format([Invoice Date],"yyyy") 
+ ".pdf"

//then try to print strReportName before you use DoCmd.OutputTo.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top