2013-04-18 5 views
1

Я в настоящее время в процессе создания отчета в доступа, после того, как генерируется, должны быть сохранены в экономии места на пользователя ставит в.Сохранение Access отчетов в PDF файлах

Вот мой блок кода.

ReportName = "Appraisal_" & Trim(Str(Year)) & "_" & Me.empnr & "_" & Veilig(Me.empnr) & "_" & Format(Now(), "YYYY_MM_DD_HH_MM_SS") 
DoCmd.CopyObject , ReportName , acReport, "rpt_beoordelen" 
DoCmd.OpenReport ReportName , acViewPreview, , "EmployeeNr='" & Me.empnr & "' and year=" & Me.Year 
DoCmd.OutputTo acOutputReport, "", acFormatPDF, , True 
DoCmd.Close acReport, ReportName 

Это генерирует и отображает отчет с правильными значениями. Он запрашивает место для сохранения. И, однажды заданный, пытается сохранить файл в заданном местоположении. Он быстро мигает печатью PDF, чтобы открыть окно местоположения.

После этого программа останавливается. В данном месте файл не найден, и отчет все еще открыт. Отладка приложения показывает мне, что

DoCmd.Close acReport, ReportName 

не достигнут. Я не получаю errormessage, и я не знаю, что происходит не так. Может ли кто-нибудь дать мне решение этой проблемы?

+0

, доступ к которым вы используете? – Hiten004

+0

Что произойдет, если вы измените строку 'OutputTo' на это ?:' DoCmd.OutputTo acOutputReport, "", acFormatPDF,, False' – HansUp

+0

@ Hiten004 Microsoft Access 2010 – user1746525

ответ

0

Если у вас возникли проблемы при получении DoCmd.OutputTo работать с «активным объектом», оставив ObjectName пустым (реф: here), то вы можете попробовать это:

Открыть отчет «rpt_beoordelen» и сохранить его Record Source запрос как сохраненный запрос с именем «rpt_beoordelen_base_data». Создание "rpt_beoordelen_data" сохраненный запрос с некоторым родовым SQL, как ...

SELECT * FROM rpt_beoordelen_base_data 

... затем сделать "rpt_beoordelen_data" Record Source для [rpt_beoordelen] отчета.

Теперь измените код из вашего вопроса на что-то вроде этого:

ReportName = "Appraisal_" & Trim(Str(Year)) & "_" & Me.empnr & "_" & Veilig(Me.empnr) & "_" & Format(Now(), "YYYY_MM_DD_HH_MM_SS") 
DoCmd.CopyObject , ReportName , acReport, "rpt_beoordelen" 
Dim cdb As DAO.Database 
Set cdb = CurrentDb 
Dim qdf As DAO.QueryDef 
Set qdf = cdb.QueryDefs("rpt_beoordelen_data") 
qdf.SQL = "SELECT * FROM rpt_beoordelen_base_data WHERE EmployeeNr='" & Me.empnr & "' and year=" & Me.Year 
Set qdf = Nothing 
DoCmd.OutputTo acOutputReport, ReportName, acFormatPDF 

Это изменит ваш вызов DoCmd.OutputTo на тот, который не зависит от «активного объекта» и может дать результаты, которые вы хотите. (FWIW, это единственный способ, с помощью которого этот метод работает для генерации PDF-версий отчетов.)

Смежные вопросы