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
:D vb[color=#FF4000]l[/color]nformation เขียนไม่ถูกต้องครับ ที่ระบายสีไว้นั้นเป็น l ตัวแอล ที่ถูกต้องเปลี่ยนเป็นตัว i ครับ

อ่านกฎข้อ 5 ด้านบน :roll: ในเรื่องการโพสต์ 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
:D ช่วยแจ้งลำดับการทดสอบว่าต้องคลิกปุ่มใด คีย์ค่าใด ในที่ใด ผลลัพธ์ที่ได้หาก 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

Code: Select all

MsgBox "ไม่พบข้อมูล", vbCritica
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
:D อีกตัวอย่างครับ

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
:D ตัวอย่าง 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
:D ได้ปรับ 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
:D ช่วยอธิบายประกอบ 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 ช่วงนี้ใช้สำหรับค้นหาชื่อคะ