Page 1 of 1

หากจะเขียน VBA ทำจดหมายเวียน ข้อมูลลงในไฟล์ pdf และสั่งปริ้น พอจะเป็นไปได้ไหมครับ

Posted: Fri Mar 11, 2022 6:24 pm
by 4ko6yon61
มีไฟล์ข้อสอบ เป็นไฟล์ pdf 1 ไฟล์ ต้องการแทรกเลขประจำตัวผู้สอบ ชื่อผู้สอบ ลงในไฟล์และสั่งพิมพ์ พอจะเขียน VBA ได้ไหมครับ หรือมีวิธีพอจะแนะนำไหมครับ

Re: หากจะเขียน VBA ทำจดหมายเวียน ข้อมูลลงในไฟล์ pdf และสั่งปริ้น พอจะเป็นไปได้ไหมครับ

Posted: Fri Mar 11, 2022 8:50 pm
by snasui
:D VBA คือการเขียนโปรแกรมทำได้แทบทุกอย่างอยู่แล้วครับ

Re: หากจะเขียน VBA ทำจดหมายเวียน ข้อมูลลงในไฟล์ pdf และสั่งปริ้น พอจะเป็นไปได้ไหมครับ

Posted: Sat Mar 12, 2022 11:02 am
by 4ko6yon61
ลองเขียนได้ดังนี้ครับ แต่ติดปัญหาตรง ต้อง save ไฟล์ทุกครั้งก่อนสั่งปริ้น ซึ่ง save ไม่ได้ครับ ขอความกรุณาด้วยครับ

Code: Select all

Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
                                      (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
                                       ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
                                       
                                       
Sub PrintPDFToSpecificPrinter(Filename As String)
    ShellExecute Application.hwnd, "print", Filename, vbNullString, vbNullString, 0&
End Sub



Sub WriteAdobeFields()

    Dim AcrobatApplication As Acrobat.CAcroApp
    Dim AcrobatDocument As Acrobat.CAcroAVDoc
    Dim AcrobatPDocument As Acrobat.AcroPDDoc
    Dim fcount As Long
    Dim sFieldName As String
    
    Set AcrobatApplication = CreateObject("AcroExch.App")
    Set AcrobatDocument = CreateObject("AcroExch.AVDoc")
    Set AcrobatPDocument = AcrobatDocument.GetPDDoc
    
    
    xRowCount = Sheets("Sheet1").Cells(Rows.Count, 2).End(xlUp).Row 'จำนวนแถวข้อมูล
    
    
        If AcrobatDocument.Open("D:\PrintIDTest\template.pdf", "") Then
            AcrobatApplication.Show
            Set AcroForm = CreateObject("AFormAut.App")
            Set Fields = AcroForm.Fields
            fcount = Fields.Count ' Number of Fields
            
            x = 1
            Do While x < xRowCount
                ValuesID = Cells(x + 1, 2).Value 'รับค่าจาก cell
                Fields("ValueID").Value = ValuesID 'เติมค่าลงใน Field

                AcrobatPDocument.Save ("D:\PrintIDTest\template.pdf") 'save ไฟล์ก่อนปริ้น
                
                PrintPDFToSpecificPrinter ("D:\PrintIDTest\template.pdf") 'ปริ้น
                
                x = x + 1
            Loop
            
        

        Else
            MsgBox "ไม่สามารถเปิดไฟล์ได้"
        
        End If
     
        
    

    
    
    AcrobatApplication.Exit
    Set AcrobatApplication = Nothing
    Set AcrobatDocument = Nothing
    Set Field = Nothing
    Set Fields = Nothing
    Set ActoForm = Nothing


    
End Sub




Re: หากจะเขียน VBA ทำจดหมายเวียน ข้อมูลลงในไฟล์ pdf และสั่งปริ้น พอจะเป็นไปได้ไหมครับ

Posted: Sat Mar 12, 2022 2:59 pm
by snasui
:D เครื่องผมไม่ได้ติดตั้ง PDF รุ่นที่เเขียน Code มาจึงได้ทำตัวอย่างการทำงานนี้มาให้ใหม่ ดูตัวอย่างได้จากไฟล์แนบครับ

ตัวอย่าง Code

Code: Select all

Sub PrintDocs()
    Dim r As Range
    With Worksheets("Sheet1")
        For Each r In .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
            .Range("p2:q2").Value = r.Resize(1, 2).Value
            .PrintOut 'Or save as to target file name
        Next r
    End With
End Sub