Page 1 of 2
วิธีแก้ Error Excel
Posted: Wed Aug 19, 2015 9:56 am
by Ueng999
รบกวนค่ะ สร้างฟอร์มสำหรับกรอกข้อมูลและค้นหาข้อมูล ค้นหาใช้งานได้ แต่เมื่อกดปุ่ม เพิ่ม จะ Error ที่ vblnformation คะ ไม่รู้เพราะอะไรรบกวนช่วยดูให้ทีหาอยู่หลายวันแล้วคะ
Public Sub entry_mode()
Dim blank_row As Single
blank_row = Worksheets(db_sheet).Cells(1, 1).End(xlDown).Row + 1
With Worksheets(db_sheet)
.Cells(blank_row, name_col).Value = entry_form.name_txtbox.Value
.Cells(blank_row, surname_col).Value = entry_form.surname_txtbox.Value
.Cells(blank_row, sex_col).Value = entry_form.sex_cbbox.Value
.Cells(blank_row, id_col).Value = entry_form.id_txtbox.Value
.Cells(blank_row, faculty_col).Value = entry_form.faculty_txtbox.Value
.Cells(blank_row, major_col).Value = entry_form.major_cbbox.Value
End With
MsgBox "Database updated", vblnformation, "Student Record"
End Sub
Re: วิธีแก้ Error Excel
Posted: Wed Aug 19, 2015 10:05 am
by Ueng999
file แนบค่ะ
Re: วิธีแก้ Error Excel
Posted: Wed Aug 19, 2015 10:49 am
by bank9597
ปรับเป็น MsgBox "Database updated", vbInformation, "Student Record" ครับ
Re: วิธีแก้ Error Excel
Posted: Wed Aug 19, 2015 10:50 am
by snasui
vb[color=#FF4000]l[/color]nformation
เขียนไม่ถูกต้องครับ ที่ระบายสีไว้นั้นเป็น
l
ตัวแอล ที่ถูกต้องเปลี่ยนเป็นตัว
i
ครับ
อ่านกฎข้อ 5 ด้านบน
ในเรื่องการโพสต์ Code ให้แสดงเป็น Code เพื่อสะดวกในการอ่านด้วยครับ
Re: วิธีแก้ Error Excel
Posted: Wed Aug 19, 2015 2:24 pm
by Ueng999
ขอบคุณมากค่ะ และขอโทษเรื่อง โพสต์ Code ด้วยคะ
Re: วิธีแก้ Error Excel
Posted: Wed Aug 19, 2015 8:20 pm
by Ueng999
ขอถามเพิ่มอีกข้อคะ ต้องการให้พิมพ์ HN.ลงไปถ้ามีข้อมูลอยู่แล้วให้ MsgBox แจ้ง "มีข้องมลูอยูแล้ว" ช่วยดู Code ให้หน่อยคะ พิมพ์ซ้ำ MsgBox ก็ไม่เห็นแจ้งคะ
Code: Select all
Private Sub id_txtbox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim db_student As Worksheet
Dim sdLR As Long, y As Long, x As Long
Set db_student = ThisWorkbook.Sheets("db_sheet ")
If db_student.Cells(Rows.Count, 1).End(xlUp).Row = 1 Then
sdLR = 2
Else
sdLR = Application.WorksheetFunction.Max(1, .db_student.Cells(Rows.Count, 1).End(xlUp).Row)
End If
For x = 2 To sdLR
If UCase(db_student.Cells(x, 1)) = id_txtbox.Text Then
MsgBox "ÁÕ¢éÍÁÙÅÍÂÙèáÅéÇ"
id_txtbox.Text = ""
Me.id_txtbox.SetFocus
Cancel = True
Exit Sub
End If
Next x
End Sub
Re: วิธีแก้ Error Excel
Posted: Wed Aug 19, 2015 8:33 pm
by snasui
ช่วยแจ้งลำดับการทดสอบว่าต้องคลิกปุ่มใด คีย์ค่าใด ในที่ใด ผลลัพธ์ที่ได้หาก Code ทำงานถูกต้องเป็นอย่างไร จะได้เข้าถึงปัญหาได้โดยไวครับ
Re: วิธีแก้ Error Excel
Posted: Wed Aug 19, 2015 8:50 pm
by bank9597
ผมไม่รู้ว่าโค๊ดนี้ถูกเขียนด้วยเจ้าตัวหรือไม่ ด้วยสาเหตุดังนี้
1. Private Sub id_txtbox_Exit(ByVal Cancel As MSForms.ReturnBoolean) ไม่ควรมาเขียนอยู่นอก Object
2. Set db_student = ThisWorkbook.Sheets("db_sheet ") กำหนดชื่อชีทผิดซึ่ง "db_sheet " น่าจะหมายถึงให้ใส่ชื่อชีทเป้าหมาย
อย่างไรก็ดี ผมขอแนะนให้ทำความเข้าใจในเบื้องต้นก่อนครับ เพื่อจะได้สื่อความหมายได้ถูกต้องและปรับแก้ได้เองเมื่อมีอะไรผิดพลาดขึ้น
จากโค๊ดปรับตามนี้ครับ
Code: Select all
Private Sub id_txtbox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim db_student As Worksheet
Dim sdLR As Long, y As Long, x As Long
Dim lngCount As Long
Set db_student = ThisWorkbook.Sheets("db_student")
lngCount = db_student.Cells(Rows.Count, 1).End(xlUp).Row
If lngCount = 1 Then
sdLR = 2
Else
sdLR = Application.WorksheetFunction.Max(2, lngCount)
End If
If sdLR = 2 Then
Exit Sub
Else
For x = 2 To sdLR
If UCase(db_student.Cells(x, 1)) = id_txtbox.Text Then
MsgBox "ÁÕ¢éÍÁÙÅÍÂÙèáÅéÇ"
id_txtbox.Text = ""
Me.id_txtbox.SetFocus
Cancel = True
Exit Sub
End If
Next x
End If
Set db_student = Nothing
End Sub
นำไปวางในฟอร์ม entry_form
Re: วิธีแก้ Error Excel
Posted: Wed Aug 26, 2015 2:46 pm
by Ueng999
ขอบคุณสำหรับคำตอบที่แล้วคะ ตอนนี้พบปัญหาว่าเมื่อกรอกข้อมูลที่ช่อง Hn. และคลิกปุ่มค้นหา ในกรณีที่ไม่มีข้อมูลตามที่ค้นหาจะขึ้น Error ที่
Code: Select all
id_check = Worksheets(db_sheet).Cells(data_row, id_col).Value
Code: Select all
Public Sub search_mode()
Dim id_search As String
Dim id_check As String
Dim data_row As Single
Dim i As Single
id_search = entry_form.id_txtbox.Value
data_row = 2
id_check = Worksheets(db_sheet).Cells(data_row, id_col).Value
With Worksheets(db_sheet)
Do Until id_check = id_search
data_row = data_row + 1
id_check = Worksheets(db_sheet).Cells(data_row, id_col).Value
Loop
End With
With entry_form
.id_txtbox.Value = Worksheets(db_sheet).Cells(data_row, id_col).Value
.name_txtbox.Value = Worksheets(db_sheet).Cells(data_row, name_col).Value
.surname_txtbox.Value = Worksheets(db_sheet).Cells(data_row, surname_col).Value
.year_txtbox.Value = Worksheets(db_sheet).Cells(data_row, year_col).Value
.sequence_txtbox.Value = Worksheets(db_sheet).Cells(data_row, sequence_col).Value
.sex_cbbox.Value = Worksheets(db_sheet).Cells(data_row, sex_col).Value
.faculty_txtbox.Value = Worksheets(db_sheet).Cells(data_row, faculty_col).Value
.major_cbbox.Value = Worksheets(db_sheet).Cells(data_row, major_col).Value
End With
End Sub
ถ้าไม่มีข้อมูลตามที่ค้นหาให้ MsgBox แจ้ง"ไม่พบข้อมูล" ไม่ทราบว่าต้องวาง code
lนี่ตรงไหนคะ
Re: วิธีแก้ Error Excel
Posted: Wed Aug 26, 2015 7:38 pm
by bank9597
ลองเพิ่มเติมโค๊ดตามนี้ครับ
Code: Select all
Public Sub search_mode()
Dim id_search As String
Dim id_check As String
Dim data_row As Single
Dim i As Single
On Error GoTo err
id_search = entry_form.id_txtbox.Value
data_row = 2
id_check = Worksheets(db_sheet).Cells(data_row, id_col).Value
With Worksheets(db_sheet)
Do Until id_check = id_search
data_row = data_row + 1
id_check = Worksheets(db_sheet).Cells(data_row, id_col).Value
Loop
End With
With entry_form
.id_txtbox.Value = Worksheets(db_sheet).Cells(data_row, id_col).Value
.name_txtbox.Value = Worksheets(db_sheet).Cells(data_row, name_col).Value
.surname_txtbox.Value = Worksheets(db_sheet).Cells(data_row, surname_col).Value
.year_txtbox.Value = Worksheets(db_sheet).Cells(data_row, year_col).Value
.sequence_txtbox.Value = Worksheets(db_sheet).Cells(data_row, sequence_col).Value
.sex_cbbox.Value = Worksheets(db_sheet).Cells(data_row, sex_col).Value
.faculty_txtbox.Value = Worksheets(db_sheet).Cells(data_row, faculty_col).Value
.major_cbbox.Value = Worksheets(db_sheet).Cells(data_row, major_col).Value
End With
Exit Sub
err:
MsgBox "äÁ辺¢éÍÁÙÅ", vbCritical
End Sub
Re: วิธีแก้ Error Excel
Posted: Wed Aug 26, 2015 8:30 pm
by snasui
อีกตัวอย่างครับ
Code: Select all
'Other code
Do Until id_check = id_search
data_row = data_row + 1
id_check = Worksheets(db_sheet).Cells(data_row, id_col).Value
If Worksheets(db_sheet).Cells(data_row, id_col).Row > _
Worksheets(db_sheet).Cells(Rows.Count, id_col).End(xlUp).Row Then
MsgBox "Not found"
Exit Sub
End If
Loop
'Other code
Re: วิธีแก้ Error Excel
Posted: Wed Sep 16, 2015 1:06 pm
by Ueng999
แก้ไข Code ตามที่แนะนำแล้ว ขอบคุณมากคะ รบกวนถามอีกปัญหาคะ คือเพิ่ม List box เข้าไป เมื่อพิมพ์ HN.ลงไป แล้วคลิกค้นหา ในช่อง List box จะขึ้นข้อมูลที่ค้นหาด้วย แต่ตอนนี้ขึ้นแค่บันทัดเดียว เช่น รหัส 490001 มีข้อมูลอยู่ 2 บันทัดต้องการให้ เมื่อใส่รหัสข้อมูลที่ list box ขึ้นตามที่มีข้อมูลอยู่ คือ 2 บันทัดคะ
490001 จันทรา มินชา 2558 1 เกวลิน 22 Cr
490002 แสงดาว ท้าวกลาง 2558 1 เกวลิน 47 Cr
490003 กาเหว่า จ้า 2558 1 สุชัย 25 Br
490001 จันทรา มินชา 2558 1 สุชัย 22 Cr
490003 สุดา รัตน์ 2558 1 นพมณี 12 RPD
Re: วิธีแก้ Error Excel
Posted: Wed Sep 16, 2015 1:08 pm
by Ueng999
file แนบคะ
Re: วิธีแก้ Error Excel
Posted: Wed Sep 16, 2015 1:44 pm
by snasui
ตัวอย่าง Code ตามด้านล่างครับ
Code: Select all
Dim rall As Range, r As Range
With Sheets("db_student")
Set rall = .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
End With
With entry_form
For Each r In rall
If r.Value = .id_txtbox.Text Then
.LstData.AddItem r.Offset(0, 1).Value & " " & r.Offset(0, 2).Value & " " & r.Offset(0, 5).Value
End If
Next r
End With
Re: วิธีแก้ Error Excel
Posted: Wed Sep 16, 2015 4:51 pm
by Ueng999
ปรับ Code ตามตัวอย่างได้แล้วคะ ขอบคุณนะคะ มีอีกปัญหาให้ช่วยคะ คือตอนนี้ต้องการให้ใส่ชื่อแล้วคลิกค้นหาก็ได้เหมือนเวลาใส่รหัส Hn.คะรบกวนช่วยดูที่คะ
Re: วิธีแก้ Error Excel
Posted: Wed Sep 16, 2015 5:18 pm
by Ueng999
แนบ file ผิดคะต้องอันนี้คะ
Re: วิธีแก้ Error Excel
Posted: Wed Sep 16, 2015 5:19 pm
by snasui
ได้ปรับ Code มาเองแล้วยัง โพสต์ Code ที่ลองปรับเองมาแล้วด้วยจะได้ช่วยดูต่อไปจากนั้นครับ
Re: วิธีแก้ Error Excel
Posted: Wed Sep 16, 2015 5:53 pm
by Ueng999
Code: Select all
Public Sub entry_mode()
Dim blank_row As Single
blank_row = Worksheets(db_sheet).Cells(1, 1).End(xlDown).Row + 1
With Worksheets(db_sheet)
.Cells(blank_row, id_col).Value = entry_form.id_txtbox.Value
.Cells(blank_row, name_col).Value = entry_form.name_txtbox.Value
.Cells(blank_row, surname_col).Value = entry_form.surname_txtbox.Value
.Cells(blank_row, year_col).Value = entry_form.year_txtbox.Value
.Cells(blank_row, sequence_col).Value = entry_form.sequence_txtbox.Value
.Cells(blank_row, sex_col).Value = entry_form.sex_cbbox.Value
.Cells(blank_row, faculty_col).Value = entry_form.faculty_txtbox.Value
.Cells(blank_row, major_col).Value = entry_form.major_cbbox.Value
End With
MsgBox "ºÑ¹·Ö¡¢éÍÁÙÅàÃÕºÃéÍÂáÅéÇ", vbInformation, "Student Record"
Unload entry_form
End Sub
Public Sub search_mode()
Dim id_search As String
Dim id_check As String
Dim data_row As Single
Dim i As Single
Dim rall As Range, r As Range
With Sheets("db_student")
Set rall = .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
End With
With entry_form
For Each r In rall
If r.Value = .id_txtbox.Text Then
.LstData.AddItem r.Offset(0, 1).Value & " " & r.Offset(0, 2).Value & " " & r.Offset(0, 5).Value
End If
Next r
End With
id_search = entry_form.id_txtbox.Value
data_row = 2
id_check = Worksheets(db_sheet).Cells(data_row, id_col).Value
With Worksheets(db_sheet)
Do Until id_check = id_search
data_row = data_row + 1
id_check = Worksheets(db_sheet).Cells(data_row, id_col).Value
If Worksheets(db_sheet).Cells(data_row, id_col).Row > _
Worksheets(db_sheet).Cells(Rows.Count, id_col).End(xlUp).Row Then
MsgBox "äÁ辺¢éÍÁÙÅ"
Exit Sub
End If
Dim name_search As String
Dim name_check As String
Dim data1_row As Single
Dim i1 As Single
Dim rall1 As Range, r1 As Range
With Sheets("db_student")
Set rall1 = .Range("b2", .Range("a" & .Rows.Count).End(xlUp))
End With
With entry_form
For Each r In rall
If r.Value = .name_txtbox.Text Then
.LstData.AddItem r.Offset(0, 1).Value & " " & r.Offset(0, 2).Value & " " & r.Offset(0, 5).Value
End If
Next r
End With
name_search = entry_form.name_txtbox.Value
data1_row = 2
name_check = Worksheets(db_sheet).Cells(data1_row, name_col).Value
With Worksheets(db_sheet)
Do Until name_check = name_search
data1_row = data_row + 1
name_check = Worksheets(db_sheet).Cells(data_row, name_col).Value
If Worksheets(db_sheet).Cells(data_row, name_col).Row > _
Worksheets(db_sheet).Cells(Rows.Count, name_col).End(xlUp).Row Then
MsgBox "äÁ辺¢éÍÁÙÅ"
Exit Sub
End If
Loop
End With
With entry_form
.id_txtbox.Value = Worksheets(db_sheet).Cells(data_row, id_col).Value
.name_txtbox.Value = Worksheets(db_sheet).Cells(data_row, name_col).Value
.surname_txtbox.Value = Worksheets(db_sheet).Cells(data_row, surname_col).Value
.year_txtbox.Value = Worksheets(db_sheet).Cells(data_row, year_col).Value
.sequence_txtbox.Value = Worksheets(db_sheet).Cells(data_row, sequence_col).Value
.sex_cbbox.Value = Worksheets(db_sheet).Cells(data_row, sex_col).Value
.faculty_txtbox.Value = Worksheets(db_sheet).Cells(data_row, faculty_col).Value
.major_cbbox.Value = Worksheets(db_sheet).Cells(data_row, major_col).Value
End With
End Sub
Re: วิธีแก้ Error Excel
Posted: Wed Sep 16, 2015 6:05 pm
by snasui
ช่วยอธิบายประกอบ Code สักหน่อยครับว่าบรรทัดใดที่ได้ปรับ Code ให้ค้นหาตามชื่อแล้ว จะได้เข้าถึงปัญหาได้โดยไว
Re: วิธีแก้ Error Excel
Posted: Wed Sep 16, 2015 6:29 pm
by Ueng999
Code: Select all
Dim name_search As String
Dim name_check As String
Dim data1_row As Single
Dim i1 As Single
Dim rall1 As Range, r1 As Range
With Sheets("db_student")
Set rall1 = .Range("b2", .Range("a" & .Rows.Count).End(xlUp))
End With
With entry_form
For Each r In rall
If r.Value = .name_txtbox.Text Then
.LstData.AddItem r.Offset(0, 1).Value & " " & r.Offset(0, 2).Value & " " & r.Offset(0, 5).Value
End If
Next r
End With
name_search = entry_form.name_txtbox.Value
data1_row = 2
name_check = Worksheets(db_sheet).Cells(data1_row, name_col).Value
With Worksheets(db_sheet)
Do Until name_check = name_search
data1_row = data_row + 1
name_check = Worksheets(db_sheet).Cells(data_row, name_col).Value
If Worksheets(db_sheet).Cells(data_row, name_col).Row > _
Worksheets(db_sheet).Cells(Rows.Count, name_col).End(xlUp).Row Then
MsgBox "äÁ辺¢éÍÁÙÅ"
Exit Sub
End If
code ช่วงนี้ใช้สำหรับค้นหาชื่อคะ