Page 1 of 1

สอบถามการเขียน Code VBA ออกรายงาน Excel

Posted: Mon Feb 26, 2018 10:19 am
by jullathep
สวัสดีครับ อาจารย์ทุกๆท่านผมมีข้อสงสัยอยากจะทราบแนวทางการเขียน Code ผมต้องการให้การออกรายงานของข้อมูลเป็นไปตามที่เรา ติ๊กถูก ที่ Checkbox ในหน้า INPUT ในหน้า Report จะมี Label ซึ่งจะเปลี่ยนไปตาม การ ติ๊กของเรา ผมอยากให้ออกรายงาน ตามที่เราติ๊กถูก
ณ เวลานี้ ผมหา Code มาได้ คือ มันเซฟ หน้า INPUT ไปด้วย ผมอยากจะให้ ไป Copy เฉพาะหน้า Report ที่มากกว่าหนึ่งการติ๊กถูกที่ Checkbox กรณีตัวอย่าง ถ้าเกิด Sell ติ๊กที่ Ckeckbox 5 อัน กดตกลง ก็ให้ Copy Sheet Report และไป Save ไว้ โดย Label จะเปลี่ยนการแสดงผล ตามที่ติ๊ก นั้นๆ ขอแนวทางและคำชี้แนะจากอาจารย์ทุกๆท่านด้วยครับ

Code: Select all

Sub SaveAsName()
Dim FName           As String
Dim FPath           As String
FPath = "D:\Report"
FName = Sheets("INPUT").TextBox1.Text
ThisWorkbook.Saveas Filename:=FPath & "\" & FName + ".xls"
End Sub

Re: สอบถามการเขียน Code VBA ออกรายงาน Excel

Posted: Mon Feb 26, 2018 2:17 pm
by logic
อ่านแล้วไม่ค่อยเข้าใจครับ

เซฟชื่อไฟล์ตามชื่อ label หรือเปล่าครับ ติ๊กถูก 5 ไว้ 5 label ก็เซฟเป็น 5 ชื่ออะไรทำนองนี้หรือเปล่าครับ :)

Re: สอบถามการเขียน Code VBA ออกรายงาน Excel

Posted: Mon Feb 26, 2018 5:02 pm
by jullathep
logic wrote: Mon Feb 26, 2018 2:17 pm อ่านแล้วไม่ค่อยเข้าใจครับ

เซฟชื่อไฟล์ตามชื่อ label หรือเปล่าครับ ติ๊กถูก 5 ไว้ 5 label ก็เซฟเป็น 5 ชื่ออะไรทำนองนี้หรือเปล่าครับ :)
ขออภัยครับ ตอบช้า พอดีพึ่งเลิกประชุม คือ เซฟชื่อเป็นชื่อ การค้า กล่าวคือ 1 การค้า เลือกขนาดได้มากกว่า 1 ขนาด ฉะนั้นผลเลยทำไว้ให้เป็นชื่อไฟล์จากชื่อการค้า ครับ แต่คือ กรณีที่เรา ติ๊กถูกที่ Ckeckbox สมมติ ติ๊ก 5 อัน ก็ให้มันไปออกรายงานเป็นไฟล์ Excel ไฟล์ใหม่ ตามการติ๊ก ที่ Checkbox หนะครับ แต่ข้อมูลที่อยู่ใน Label มันจะแสดงตามการติ๊กครับ เช่น ติ๊กที่ 100 ลบ.ซม.ใน Label ก็ แสดง เป็น 100 ลบ.ซม.
กรณีติ๊กถูกมากกว่า 1
100 ลบ.ซม.
250
500
1 ลิตร
กดตกลง ก็ออกรายงานเป็น ทั้งหมด 4 ไฟล์ Excel -ข้อมูลใน Label ด้านใน Report ก็คือ ไฟล์ที่ 1 (100 ลบ.ซม.) ไฟล์ที่ 2 (250) ตามลำดับครับ ขอบคุณครับ

Re: สอบถามการเขียน Code VBA ออกรายงาน Excel

Posted: Mon Feb 26, 2018 9:53 pm
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

Dim FName As String
Dim FPath As String
Dim ckb As Object
FPath = "D:\Report"
FName = Sheets("INPUT").TextBox1.Text
With Sheets("INPUT")
    For Each ckb In .OLEObjects
        If Left(ckb.Name, 5) = "Check" Then
            If ckb.Object.Value = True Then
                With Sheets("Report")
                    .Label1.Caption = ckb.Object.Caption
                    ThisWorkbook.Sheets("Report").Copy
                    ActiveWorkbook.SaveAs Filename:=FPath & "\" & FName & .Label1.Caption + ".xls"
                    ActiveWorkbook.Close False
                End With
            End If
        End If
    Next ckb
End With

Re: สอบถามการเขียน Code VBA ออกรายงาน Excel

Posted: Tue Feb 27, 2018 8:25 am
by jullathep
snasui wrote: Mon Feb 26, 2018 9:53 pm :D ตัวอย่าง Code ครับ

Code: Select all

Dim FName As String
Dim FPath As String
Dim ckb As Object
FPath = "D:\Report"
FName = Sheets("INPUT").TextBox1.Text
With Sheets("INPUT")
    For Each ckb In .OLEObjects
        If Left(ckb.Name, 5) = "Check" Then
            If ckb.Object.Value = True Then
                With Sheets("Report")
                    .Label1.Caption = ckb.Object.Caption
                    ThisWorkbook.Sheets("Report").Copy
                    ActiveWorkbook.SaveAs Filename:=FPath & "\" & FName & .Label1.Caption + ".xls"
                    ActiveWorkbook.Close False
                End With
            End If
        End If
    Next ckb
End With
ขอบคุณครับท่านอาจารย์ คนควน และพี่ๆทุกท่าน ที่ช่วยเหลือมาโดยตลอด ขอบคุณอีกครั้งครับ ทุกๆท่าน

Re: สอบถามการเขียน Code VBA ออกรายงาน Excel

Posted: Tue Feb 27, 2018 11:35 am
by jullathep
jullathep wrote: Tue Feb 27, 2018 8:25 am
snasui wrote: Mon Feb 26, 2018 9:53 pm :D ตัวอย่าง Code ครับ

Code: Select all

Dim FName As String
Dim FPath As String
Dim ckb As Object
FPath = "D:\Report"
FName = Sheets("INPUT").TextBox1.Text
With Sheets("INPUT")
    For Each ckb In .OLEObjects
        If Left(ckb.Name, 5) = "Check" Then
            If ckb.Object.Value = True Then
                With Sheets("Report")
                    .Label1.Caption = ckb.Object.Caption
                    ThisWorkbook.Sheets("Report").Copy
                    ActiveWorkbook.SaveAs Filename:=FPath & "\" & FName & .Label1.Caption + ".xls"
                    ActiveWorkbook.Close False
                End With
            End If
        End If
    Next ckb
End With
ขอบคุณครับท่านอาจารย์ คนควน และพี่ๆทุกท่าน ที่ช่วยเหลือมาโดยตลอด ขอบคุณอีกครั้งครับ ทุกๆท่าน

Code: Select all

Dim FName As String
Dim FPath As String
Dim ckb As Object
FPath = "D:\Report"
FName = Sheets("INPUT").TextBox1.Text
With Sheets("INPUT")
    For Each ckb In .OLEObjects
        If Left(ckb.Name, 5) = "Check" Then
            If ckb.Object.Value = True Then
                With Sheets("Report")
                    .Label1.Caption = ckb.Object.Caption
                    ThisWorkbook.Sheets("Report").Copy
                    ActiveWorkbook.SaveAs Filename:=FPath & "\" & FName & .Label1.Caption + ".xls"
                    ActiveWorkbook.Close False
                End With
            End If
        End If
    Next ckb
End With
อาจารย์ครับ ผมเอาไปปรับใช้จริงแล้วมันฟ้อง Error Run-time '1004': ที่บรรทัด
ActiveWorkbook.SaveAs Filename:=FPath & "\" & FName & .Label1.Caption + ".xls"
นี้ครับ

Re: สอบถามการเขียน Code VBA ออกรายงาน Excel

Posted: Tue Feb 27, 2018 12:01 pm
by logic
ผมคัดลอกโค้ดอาจารย์ไปทดสอบแล้วเซฟได้ปกติ ช่วยแนบไฟล์ล่าสุดมาให้เพื่อน ๆ ช่วยกันลองอีกทีครับ :)