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

ให้ลบ 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

ลองอ่านที่ผมตอบไว้ที่นี่ครับ
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

ลองปรับ 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

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

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

สำหรับกระทู้นี้ผมรวมกลับเข้ามาให้แล้ว
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

Code ที่เขียนมาสามารถใช้ได้ครับ
Re: การลบบรรทัดในชีทด้วยVBA
Posted: Thu Feb 16, 2012 11:02 am
by yodpao.b
ขอบคุณมากครับอาจาร์ย