Page 1 of 1

ขออนุญาตสอบเรื่องกรเขียนคำสั่งค้นหาในฟอร์ม ค้นหาได้เพียงบางรายการ

Posted: Wed Oct 11, 2023 2:37 am
by 9KiTTi
ผมสร้างฟอร์มเพื่อค้นหาจาก id แล้วแสดงข้อมูลที่ค้นหาพบ แต่ไม่สามารถค้นหาได้ทุก id ถึงแม้จะมีรายการอยู่ โดยตัวอักษรสีแดงจะไม่สามารถค้นหาเจอ รบกวนแนะนำวิธีแก้ไขด้วยครับ ขอบพระคุณครับ

Code: Select all

Private Sub CommandButton1_Click()

    Dim RecordRow As Long
    Dim RecordRange As Range

    On Error Resume Next
        
        RecordRow = Application.Match(CLng(TextBox1.Value), Range("Table1[id]"), 0)

        Set RecordRange = Range("Table1").Cells(1, 1).Offset(RecordRow - 1, 0)

        If Err.Number <> 0 Then
    
            ErrorLabel.Visible = True
            On Error GoTo 0
            Exit Sub
        
        End If

    On Error GoTo 0
    ErrorLabel.Visible = False
    TextBox2.Value = RecordRange(1, 1).Offset(0, 1).Value

End Sub

Re: ขออนุญาตสอบเรื่องกรเขียนคำสั่งค้นหาในฟอร์ม ค้นหาได้เพียงบางรายการ

Posted: Wed Oct 11, 2023 5:50 am
by snasui
:D คอลัมน์ ID มีทั้ง Data Type ที่เป็น Number และ Text การค้นหาจะต้องค้นหาทั้งสองรูปแบบ ปกติควรกำหนด Data Type ของคอลัมน์ใด ๆ ให้เป็นรูปแบบเดียวเท่านั้น การทำงานกับข้อมูลจะต้องคำนึงถึงสิ่งนี้เป็นสำคัญครับ

ตัวอย่างการปรับ Code ให้หาได้ทั้ง Text และ Number (ซึ่งไม่แนะนำ)

Code: Select all

Private Sub CommandButton1_Click()

    Dim RecordRow As Long, mText As Long, mNum As Long
    Dim RecordRange As Range
   
    ErrorLabel.Visible = False
    On Error Resume Next
        
    mText = Application.Match(TextBox1.Value, Range("Table1[id]"), 0)
    mNum = Application.Match(CLng(TextBox1.Value), Range("Table1[id]"), 0)
    RecordRow = Application.Max(mText, mNum)
    TextBox2.Text = ActiveSheet.Cells(RecordRow, "b").Value
    If RecordRow = 0 Then
        ErrorLabel.Visible = True
    End If
    
'    Set RecordRange = Range("Table1").Cells(1, 1).Offset(RecordRow - 1, 0)
'    If Err.Number <> 0 Then
'
'        ErrorLabel.Visible = True
'        On Error GoTo 0
'        Exit Sub
'
'    End If
'
    On Error GoTo 0
    'ErrorLabel.Visible = False
'    TextBox2.Value = RecordRange(1, 1).Offset(0, 1).Value

End Sub

Re: ขออนุญาตสอบเรื่องกรเขียนคำสั่งค้นหาในฟอร์ม ค้นหาได้เพียงบางรายการ

Posted: Wed Oct 11, 2023 11:38 am
by 9KiTTi
snasui wrote: Wed Oct 11, 2023 5:50 am :D คอลัมน์ ID มีทั้ง Data Type ที่เป็น Number และ Text การค้นหาจะต้องค้นหาทั้งสองรูปแบบ ปกติควรกำหนด Data Type ของคอลัมน์ใด ๆ ให้เป็นรูปแบบเดียวเท่านั้น การทำงานกับข้อมูลจะต้องคำนึงถึงสิ่งนี้เป็นสำคัญครับ

ตัวอย่างการปรับ Code ให้หาได้ทั้ง Text และ Number (ซึ่งไม่แนะนำ)

Code: Select all

Private Sub CommandButton1_Click()

    Dim RecordRow As Long, mText As Long, mNum As Long
    Dim RecordRange As Range
   
    ErrorLabel.Visible = False
    On Error Resume Next
        
    mText = Application.Match(TextBox1.Value, Range("Table1[id]"), 0)
    mNum = Application.Match(CLng(TextBox1.Value), Range("Table1[id]"), 0)
    RecordRow = Application.Max(mText, mNum)
    TextBox2.Text = ActiveSheet.Cells(RecordRow, "b").Value
    If RecordRow = 0 Then
        ErrorLabel.Visible = True
    End If
    
'    Set RecordRange = Range("Table1").Cells(1, 1).Offset(RecordRow - 1, 0)
'    If Err.Number <> 0 Then
'
'        ErrorLabel.Visible = True
'        On Error GoTo 0
'        Exit Sub
'
'    End If
'
    On Error GoTo 0
    'ErrorLabel.Visible = False
'    TextBox2.Value = RecordRange(1, 1).Offset(0, 1).Value

End Sub
ปรับแก้ code ตามที่อาจารย์แนะนำแล้วครับ แต่ข้อมูลที่แสดงผลออกมาไม่ตรง ที่ textbox2 จะแสดงผลขึ้นแถว 1 แถว ไม่ตรงกับ id ที่ค้นหาครับ

Re: ขออนุญาตสอบเรื่องกรเขียนคำสั่งค้นหาในฟอร์ม ค้นหาได้เพียงบางรายการ

Posted: Wed Oct 11, 2023 12:07 pm
by snasui
:D ควรฝึก Debug ให้เป็นครับ

กรณีนี้ค่า RecordRow มันน้อยไป 1 ลำดับ วิธีแก้คือบวกค่า 1 เข้าไปก็จะได้คำตอบครับ

Re: ขออนุญาตสอบเรื่องกรเขียนคำสั่งค้นหาในฟอร์ม ค้นหาได้เพียงบางรายการ

Posted: Wed Oct 11, 2023 3:25 pm
by 9KiTTi
ขอบพระคุณครับอาจารย์ ขอกลับฝึกเรื่อง debug ครับ