أهلاً أخي أحمد .. الحل يسير إن شاء الله تعالى ..
قبل أمر الطباعة في الدالة ExportToPDF_SmartPrinter .. فقط كل ما عليك هو نقل التركيز الى التقرير . بحيث قم بإضافة السطر التالي قبل أمر الطباعة .
DoCmd.SelectObject acReport, reportName, False
يصبح الكود كالتالي :-
Public Function ExportToPDF_SmartPrinter()
Dim reportName As String
Dim defaultPrinter As String
Dim prt As Printer
Dim pdfPrtName As String
On Error Resume Next
reportName = Screen.ActiveReport.Name
If Err.Number <> 0 Then
MsgBox "لا يوجد تقرير نشط", vbExclamation + vbMsgBoxRight, ""
Exit Function
End If
On Error GoTo 0
pdfPrtName = ""
For Each prt In Application.Printers
If InStr(1, prt.DeviceName, "PDF", vbTextCompare) > 0 Or _
InStr(1, prt.DeviceName, "Cute", vbTextCompare) > 0 Or _
InStr(1, prt.DeviceName, "Foxit", vbTextCompare) > 0 Then
pdfPrtName = prt.DeviceName
Exit For
End If
Next prt
If pdfPrtName = "" Then
MsgBox "لم نتمكن من العثور على طابعة افتراضية وهمية في نظامك" & vbCrLf & vbCrLf & _
"يرجى تثبيت طابعة مجانية على الويندوز مثل بي دي إف فاكتوريً", vbCritical + vbMsgBoxRight, ""
Exit Function
End If
defaultPrinter = Application.Printer.DeviceName
Set Application.Printer = Application.Printers(pdfPrtName)
DoCmd.SelectObject acReport, reportName, False
DoCmd.PrintOut acPrintAll
Set Application.Printer = Application.Printers(defaultPrinter)
End Function
جرب بنفسك وأخبرني