Page 1 of 1

VB Code export เป็น PDF ครั้งเดียว โดยมีเงื่อนไง

Posted: Sun May 25, 2025 7:51 am
by tigerwit
จากไฟล์ที่แนบมา

Code: Select all

Sub printpdf()
    Dim sFolderPath As String
    Dim FName As String
    Dim fdObj As Object
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set fdObj = CreateObject("Scripting.FileSystemObject")
    fdObj.CreateFolder ("C:\" & Range("A2").Value)
    sFolderPath = "C:\" & Range("A2").Value
    FName = Range("A1").Value & ".PDF"
'    If Sheet1.Range("J1").Value > 38 Then
        Sheets(Array("sheet2", "sheet3", "sheet4", "sheet5", "sheet6")).Select
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sFolderPath & "\" & FName
        Sheet1.Select
'     End If
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    MsgBox "Print OK"
End Sub
ต้องการส่งออก sheet2 ถึง sheet6 เป็น PDF ในครั้งเดียวกันหมด โดยมีเงื่อนไขว่า
หากที่ Sheet2 มีข้อมูลไม่เกิน 38 รายการ ให้ส่งออกเพียงหน้าเดียว
หากเกิน 38 รายการ ให้ส่งออก 2 หน้า
ต้องปรับ Code อย่างไรครับ

Re: VB Code export เป็น PDF ครั้งเดียว โดยมีเงื่อนไง

Posted: Sun May 25, 2025 8:16 am
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

Sub printpdf()
    Dim sFolderPath As String
    Dim FName As String
    Dim fdObj As Object
    
    On Error Resume Next
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set fdObj = CreateObject("Scripting.FileSystemObject")
    fdObj.CreateFolder ("C:\" & Range("A2").Value)
    sFolderPath = "C:\" & Range("A2").Value
    FName = Range("A1").Value & ".PDF"
    
    If Sheet1.Range("J1").Value > 38 Then
        Sheets(Array("sheet2", "sheet3", "sheet4", "sheet5", "sheet6")).Select
    Else
        With Sheets("Sheet2")
            With .PageSetup
                .PrintArea = "A2:J38"
                .FitToPagesTall = 1
            End With
        .Select
        End With
    End If
    
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sFolderPath & "\" & FName
    Sheet1.Select

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    MsgBox "Print OK"
End Sub

Re: VB Code export เป็น PDF ครั้งเดียว โดยมีเงื่อนไง

Posted: Mon May 26, 2025 9:28 am
by tigerwit
ขอบคุณครับ
จากโค้ดที่แนะนำมาครับ
เมื่อทดสอบแล้ว จะพิมพ์เฉพาะ Sheet2 ออกมาเพียงหน้าเดียว
แต่ที่ต้องการคือต้องการ
ถ้ามีข้อมูลไม่เกิน 38 รายการ ให้พิมพ์ Sheet2 หน้า 1 เพียงหน้าเดียว และ พิมพ์ Sheet3 Sheet4 Sheet5 Sheet6 มาด้วย
ถ้ามีข้อมูลเกิน 38 รายการ ให้พิมพ์ Sheet2 ทั้งสองหน้า และ พิมพ์ Sheet3 Sheet4 Sheet5 Sheet6 มาด้วย

Re: VB Code export เป็น PDF ครั้งเดียว โดยมีเงื่อนไง

Posted: Mon May 26, 2025 10:09 am
by snasui
:D ลองปรับมาเองก่อนด้วย Code ที่ให้ไป

การกำหนดให้แสดงกี่หน้าในชีตใด ๆ สามารถใช้สิ่งที่ตอบไปแล้วมาประยุกต์ได้ การเลือก Sheet ทั้งหมดก่อน Print สามารถใช้ Code เดิมได้ อาจจะนำ Code ไปถาม Copilot หรือ ChatGPT ให้ปรับให้ก่อนได้ ติดตรงไหนค่อยถามกันต่อครับ