:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

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

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
4ko6yon61
Member
Member
Posts: 30
Joined: Fri Mar 10, 2017 12:45 pm

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

#1

Post by 4ko6yon61 »

มีไฟล์ข้อสอบ เป็นไฟล์ pdf 1 ไฟล์ ต้องการแทรกเลขประจำตัวผู้สอบ ชื่อผู้สอบ ลงในไฟล์และสั่งพิมพ์ พอจะเขียน VBA ได้ไหมครับ หรือมีวิธีพอจะแนะนำไหมครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31205
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#2

Post by snasui »

:D VBA คือการเขียนโปรแกรมทำได้แทบทุกอย่างอยู่แล้วครับ
4ko6yon61
Member
Member
Posts: 30
Joined: Fri Mar 10, 2017 12:45 pm

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

#3

Post 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



Attachments
PrintIDTest.xlsm
(19.35 KiB) Downloaded 11 times
1.png
1.png (97.73 KiB) Viewed 118 times
template.pdf
(195.01 KiB) Downloaded 11 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31205
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#4

Post 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
Attachments
PrintIDTest.xlsm
(206.23 KiB) Downloaded 21 times
Post Reply