snasui.com ยินดีต้อนรับ ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
Private Sub CommandButton1_Click()
Dim CurrentRow As Long
Dim id As Long
Dim lastrow As Long
Dim rowselect As Long
If ComboBox1.Value = "" Then
lastrow = Cells(Rows.Count, 1).End(xlUp).Row
CurrentRow = lastrow + 1
id = WorksheetFunction.Max(Range("A2:A300"))
If id = 0 Then
id = 1
Else
id = id + 1
End If
Cells(CurrentRow, 1).Value = id
Cells(CurrentRow, 2).Value = TextBox1.Value
Cells(CurrentRow, 3).Value = TextBox2.Value
Cells(CurrentRow, 4).Value = ComboBox2.Value
Cells(CurrentRow, 5).Value = TextBox3.Value
Else
id = ComboBox1.Value
rowselect = WorksheetFunction.Match(id, Sheet1.Range("A1:A300"), 0)
Rows(rowselect).Select
Cells(rowselect, 2).Value = TextBox1.Value
Cells(rowselect, 3).Value = TextBox2.Value
Cells(rowselect, 4).Value = ComboBox2.Value
Cells(rowselect, 5).Value = TextBox3.Value
End If
Unload Me
UserForm1.Show
End Sub
Private Sub CommandButton2_Click()
Dim id As Long
Dim rowselect As Long
If ComboBox1.Value = "" Then
MsgBox ("¡ÃسÒàÅ×Í¡¢éÍÁÙÅ")
Else
id = ComboBox1.Value
rowselect = WorksheetFunction.Match(id, Sheet1.Range("A1:A300"), 0)
Rows(rowselect).Select
Rows(rowselect).EntireRow.Delete
End If
Unload Me
UserForm1.Show
End Sub
Private Sub CommandButton3_Click()
Unload Me
Sheet1.Activate
End Sub
Private Sub UserForm_Initialize()
TextBox1.SetFocus
End Sub
dim id as string
on error resume next
If ComboBox1.Value <> "" Then
TextBox1.Value = WorksheetFunction.VLookup(id, Sheet1.Range("A2:E300"), 2, 0)
'...Other code
เนื่่องจากตัวเลขใน Worksheet เป็น Text การประกาศตัวแปรก็กำหนดให้เป็น Text และไม่ต้องใช้ Clng ครอบครับ
สำหรับกรณีล่าสุด ลองประกาศตัวแปร id เป็น integer หรือ long ดูครับ
ผมเข้าใจว่าข้อมูลในช่วง sheet7.range("a1:a200") เป็นตัวเลข ดังนั้น id ที่จะเอามา match กันก็ควรเป็นตัวเลขด้วยครับ
แต่เห็นว่าเมื่อมีเบอร์ id ใหม่ใส่เข้าไป ตัวเลขจะกลายเป็น text ผมว่าควรตั้งค่ารูปแบบให้เหมือนๆ กันจะได้ลดการเกิด error ครับ การตั้งค่ารูปแบบตัวเลขให้เป็น text น่าจะทำเมื่อจำเป็นจริงๆ เช่น เลข invoice ที่ต้องมี 0 นำหน้าเยอะๆ หรืออะไรทำนองนี้ แต่กรณีนี้เป็นเลข id ผมว่าควรให้มีรูปแบบเป็นตัวเลขจะได้นำมาใช้งานง่ายๆ ครับ
หมายถึงว่า ให้ค้นหาได้ทั้งจาก id หรือชื่อผู้ใช้บริการ หรือเปล่าครับ
ผมว่าโค้ดที่เขียนมาก็เข้าใจง่ายดีครับ เพียงแต่สงสัยว่าทำไมจึงต้องกำหนดรูปแบบเซลล์ในชีท LOCKER SV ให้เป็น text ทั้งหมด และเหมือนกับว่ากำหนดหลังจากที่ทำตารางข้อมูลเสร็จแล้ว เวลาใส่ตัวเลขลงไปทีหลัง ตัวเลขนั้นเลยกลายเป็น text คราวนี้ก็เลยมีตัวเลขที่มีรูปแบบเป็น number และ text ผสมกันในคอลัมน์เดียว เวลาเอามาใช้ก็ไม่ค่อยสะดวกครับ คิดว่าควรปรับรูปแบบตัวเลขในชีทก่อน แล้วก็มาปรับโค้ดครับ
สำหรับโค้ดการค้นหาทำได้หลายแบบ ลองศึกษาโค้ดเหล่านี้เพิ่มเติมก็ได้ครับ For... Next เป็นการวนลูป เราสั่งได้ว่าให้ตรวจสอบแต่ละเซลล์ในช่วงที่กำหนดเพื่อดูว่ามีข้อมูลที่เราสนใจหรือไม่ เช่น