Page 1 of 1

การลบบรรทัดในชีทด้วยVBA

Posted: Mon Feb 13, 2012 12:10 pm
by yodpao.b
รบกวนอาจาร์ยช่วยตอบหน่อยครับผมไม่เข้าใจเรื่องโคดที่สั่งให้ลบบรรทัดที่ต้องการลบ
ยกตัวอย่าง ต้องการลบรหัสชื่อ GP-2554-00084 แต่รหัสนี้มี 3 บรรทัด
ผมได้ใช้โคดด้านล่างนี้ผลที่ได้คือมันลบบันทัดเดียว

Code: Select all

Private Sub CommandButton1_Click()
On Error Resume Next
                Sheets("DataReimbursement").Select
                Range("C11").Select
                    Do While True
                            If ActiveCell.Value = TextBox1.Text Then
                                    ActiveCell.Offset(0, 0).EntireRow.Delete
                                    'Unload Me
                                    Exit Do
                            End If
                                ActiveCell.Offset(1, 0).Select
                        Loop
End Sub
และทั้งนี้ได้นแนบไฟล์มาด้วยครับ
ขอบคุณครับ

Re: การลบบรรทัดในชีทด้วยVBA

Posted: Mon Feb 13, 2012 1:15 pm
by snasui
:lol: ให้ลบ Exit Do หรือ Mark Exit Do ให้เป็น Comment ครับ

Re: การลบบรรทัดในชีทด้วยVBA

Posted: Mon Feb 13, 2012 1:51 pm
by yodpao.b
ตอนนี้ได้ทดลองทำเอา Exit Do ออกจากโคดแล้ว
ผลลัพธ์ที่ได้ ดูเหมือนจะลบออกได้แต่ยังไม่เห็นผลลัพธ์ใดเพราะเครื่องบอกสถานะว่ากำลังคำนวณเซล 100 %
และหน้าจอก็ค้างหน้าจอแบบนั้นตลอดครับ

Re: การลบบรรทัดในชีทด้วยVBA

Posted: Mon Feb 13, 2012 2:00 pm
by snasui
:D ลองอ่านที่ผมตอบไว้ที่นี่ครับ :arrow: viewtopic.php?p=13844#p13844

Re: การลบบรรทัดในชีทด้วยVBA

Posted: Mon Feb 13, 2012 2:43 pm
by yodpao.b

Code: Select all

Private Sub CommandButton1_Click()
On Error Resume Next
                Sheets("DataReimbursement").Select
                Range("C11").Select
                    Do While ActiveCell <> ""            
                            If ActiveCell.Value = TextBox1.Text Then
                                    ActiveCell.Offset(0, 0).EntireRow.Delete
                            End If
                                ActiveCell.Offset(1, 0).Select
                        Loop
Unload Me
End Sub
ผมได้แก้เป็นโดดที่เห็นด้านบน
ผลที่ได้คือ
ถ้ามีรหัสที่ซ้ำกันอยู่ 3 แถว เมื่อ run แล้วจะเหลือแถว 2 อยู่
ถ้ามีรหัสที่ซ้ำกันอยู่ 4 แถว เมื่อ run แล้วจะเหลือแถว 2และ4 อยู่
ครับแล้วต้องทำอย่างไรอีกครับ
คือถ้ามี 4 แถวต้องการให้ลบทั้ง 4 แถวครับผม

Re: การลบบรรทัดในชีทด้วยVBA

Posted: Mon Feb 13, 2012 3:37 pm
by snasui
:lol: ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Private Sub CommandButton1_Click()
    'On Error Resume Next
    Sheets("DataReimbursement").Select
    Range("C11").Select
    Do While ActiveCell <> ""
        If ActiveCell.Value = TextBox1.Text Then
            ActiveCell.Offset(0, 0).EntireRow.Delete
            'Unload Me
'            Exit Do
        Else
            ActiveCell.Offset(1, 0).Select
        End If
    Loop
End Sub

Re: การลบบรรทัดในชีทด้วยVBA

Posted: Mon Feb 13, 2012 3:48 pm
by yodpao.b
ขอบคุณมากครับใช้ได้แล้ว

Re: การลบบรรทัดในชีทด้วยVBA

Posted: Tue Feb 14, 2012 3:00 pm
by yodpao.b
อาจาร์ยครับ จากโคดด้านล่างนี้ผมว่าผม copy มาจากอาจาร์ย

Code: Select all

Private Sub CommandButton111_Click()
    Dim i As Integer
    Sheets("DataReimbursement").Select
    Range("C11").Select
    Do While ActiveCell <> ""
        If ActiveCell.Value = TextBox1.Text Then
            ActiveCell.Offset(0, 0).EntireRow.Delete
            i = i + 1
        Else
            ActiveCell.Offset(1, 0).Select
        End If
    Loop
            Unload Me
End Sub
ไม่เข้าใจว่า โพสต์นี้หายไป
หรือว่าใช่ได้ทั้งสองแบบครับ

Re: การลบบรรทัดในชีทด้วยVBA แบบลบ 2 ตาราง ใน Code เดียว

Posted: Tue Feb 14, 2012 3:23 pm
by yodpao.b
จากที่อาจาร์ยสอนมาการลบข้อมูลทั้งบรรทัดมีอยู่ 2 แบบ

แบบที่ 1 มีรหัสไม่ซ้ำกันดังCodeด้านล่าง

Code: Select all

Private Sub CommandButton1_Click()
    
Sheets("DataEachUse").Select
Range("C11").Select
   Do While True
        If ActiveCell.Value = TextBox1.Text Then
           ActiveCell.Offset(0, 0).EntireRow.Delete
           Exit Sub
         End If
          ActiveCell.Offset(1, 0).Select
   Loop
Unload Me
End Sub
แบบที่2 มีรหัสซ้ำกันดังCodeด้านล่าง

Code: Select all

Private Sub CommandButton1_Click()

    Sheets("DataReimbursement").Select
    Range("C11").Select
    Do While ActiveCell <> ""
        If ActiveCell.Value = TextBox1.Text Then
            ActiveCell.Offset(0, 0).EntireRow.Delete
        Else
            ActiveCell.Offset(1, 0).Select
        End If
    Loop
    Unload Me
End Sub
คำอธิบาย
เนื่องจากตารางที่ต้องการลบอยู่คนละหน้ากัน จึงต้องสั่งลบถึง 2 ครั้ง เป็นไปได้ไหมที่จะสั่งเพียง 1 ครั้ง แล้วให้
โปรแกรมทำการลบทั้ง 2 หน้า

คำถาม
ต้องการนำโคดทั้ง 2 มารวมกัน โดยใช้คำสั่งเพียง 1 ครั้ง

ขอบคุณครับ

Re: การลบบรรทัดในชีทด้วยVBA

Posted: Tue Feb 14, 2012 4:41 pm
by snasui
:D ไม่ได้หายแต่อย่างใดครับ ผมปรับ Code ให้เหลือเฉพาะที่จำเป็น บรรทัดอื่น ๆ ผมใส่เข้าไปเพื่อทดสอบครับ

Re: การลบบรรทัดในชีทด้วยVBA แบบลบ 2 ตาราง ใน Code เดียว

Posted: Tue Feb 14, 2012 4:46 pm
by snasui
:D ลองรวมกันเองดูก่อนครับ ถ้ายังไม่ได้ลองแนบ Code ที่รวมกันแล้วนั้นมาดูอีกรอบครับ :mrgreen:

เรื่องเดียวกันไม่ควรแยกโพสต์กระทู้ใหม่ครับ :twisted: สำหรับกระทู้นี้ผมรวมกลับเข้ามาให้แล้ว

Re: การลบบรรทัดในชีทด้วยVBA

Posted: Wed Feb 15, 2012 12:49 pm
by yodpao.b
ตอนนี้นำมารวมกันแล้วใช้ได้ครับ
แต่กลัวว่าจะไม่ถูกต้องซะทีเดียว
รบกวนอาจาร์ยช่วยดูว่าถูกต้องตามหลักไหม

Code: Select all

Private Sub CommandButton1_Click()

Sheets("DataEachUse").Select
Range("C11").Select
   Do While ActiveCell <> ""
        If ActiveCell.Value = TextBox1.Text Then
           ActiveCell.Offset(0, 0).EntireRow.Delete
        Else
            ActiveCell.Offset(1, 0).Select
        End If
    Loop
    Sheets("DataReimbursement").Select
    Range("C11").Select
    Do While ActiveCell <> ""
        If ActiveCell.Value = TextBox1.Text Then
            ActiveCell.Offset(0, 0).EntireRow.Delete
        Else
            ActiveCell.Offset(1, 0).Select
        End If
    Loop
Unload Me
MsgBox "          ขั้นตอนดำเนินการลบใบพัสดุเลขที่  " & TextBox1 & "เสร็จเรียบร้้อยแล้ว      ", vbExclamation, "   โปรแกรมการจัดเก็บข้อมูล"
End Sub

Re: การลบบรรทัดในชีทด้วยVBA

Posted: Wed Feb 15, 2012 7:11 pm
by snasui
:lol: Code ที่เขียนมาสามารถใช้ได้ครับ

Re: การลบบรรทัดในชีทด้วยVBA

Posted: Thu Feb 16, 2012 11:02 am
by yodpao.b
ขอบคุณมากครับอาจาร์ย