Page 1 of 1

รัน code index match แล้ว error

Posted: Fri Apr 20, 2018 12:33 am
by sutham
เมื่อคีย์ 000002 ในช่องเลขทะเบียนใน userform1 เมื่อกดปุ่ม ตกลง เพื่อให้ค้นหาข้อมูลที่อยู่ในคอลัมน์ E ของ sheet1 มาแสดงในช่อง textbox2 ซึ่งเป็นชื่อหนังสือ พอกดปุ่ม ตกลง แล้ว ขึ้น error
code ที่ผมเขียน คือ

Code: Select all

Private Sub CommandButton1_Click()
TextBox2.Value = WorksheetFunction.Index(Worksheets("Sheet1").Range("A:E"), WorksheetFunction.Match(TextBox1.Value, Worksheets("Sheet1").Range("A:A"), 0), 5)
End Sub
ขอคำแนะนำด้วยครับ
ขอบคุณครับ

Re: รัน code index match แล้ว error

Posted: Fri Apr 20, 2018 5:38 am
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

Private Sub CommandButton1_Click()
    Dim sh As Worksheet
    Set sh = Sheets("Sheet1")
    With WorksheetFunction
        If .CountIf(sh.Range("A:A"), CInt(0 & TextBox1.Value)) Then
            TextBox2.Value = .Index(sh.Range("A:E"), _
                .Match(CInt(TextBox1.Value), sh.Range("A:A"), 0), 5)
        Else
            TextBox2.Value = ""
            MsgBox "Not found."
        End If
    End With
End Sub

Re: รัน code index match แล้ว error

Posted: Fri Apr 20, 2018 6:13 am
by sutham
ใช้งานได้แล้วครับ
ขอบคุณครับ
แต่อยากจะทราบว่าเพราะเหตุใด code ดังกล่าว จึง error

Re: รัน code index match แล้ว error

Posted: Fri Apr 20, 2018 6:22 am
by snasui
sutham wrote: Fri Apr 20, 2018 6:13 am ใช้งานได้แล้วครับ
ขอบคุณครับ
แต่อยากจะทราบว่าเพราะเหตุใด code ดังกล่าว จึง error
:D ที่ Error เพราะว่าค่าใน TextBox เป็น Text ส่วนค่าใน Worksheet เป็น Number จำเป็นจะต้องแปลง Text ให้เป็น Number เสียก่อนจึงจะ Match กันได้ สังเกตว่าผมจะใช้ Cint เพื่อแปลงข้อมูลใน TextBox ให้เป็น Integer ครับ

การนำข้อมูลมา Match กันให้ตรวจสอบ Data Type ก่อนเสมอว่าเป็นประเภทเดียวกันหรือไม่ การกำหนดรูปแบบให้มี 0 นำหน้าไม่ได้ช่วยให้เปลี่ยน Data Type แต่อย่างใด ควรอ่านและทำความเข้าใจ Code ประกอบจะได้ทราบว่ามีประเด็นอะไรเกี่ยวข้องกับงานลักษณะนี้บ้างที่จะต้องคำนึงถึงครับ

Re: รัน code index match แล้ว error

Posted: Fri Apr 20, 2018 7:43 am
by sutham
เข้าใจแล้วครับ
ขอบคุณครับ