Page 1 of 1

สอบถามเรื่อง Vlookup ใน UserForm ค่ะ

Posted: Tue Mar 15, 2016 9:25 pm
by Premmy
รบกวนท่านอาจารย์และผู้รู้ทุกท่านค่ะ
คือหนึ่งมีปัญหาเรื่อง Vlookup ใน UserForm ค่ะ
โค๊ดที่ใช้
Private Sub TextBox2_AfterUpdate()
If WorksheetFunction.CountIf(Sheet2.Range("A:A"), Me.TextBox2.Value) = 0 Then
MsgBox "No data! Please insert name Correct"
Me.TextBox2.Value = ""
Exit Sub
End If
With Me
TextBox1 = Application.WorksheetFunction.VLookup(TextBox2, Sheet2.Range("Data1"), 2, 0)
End With
End Sub

มีปัญหาที่ว่า เวลาใส่ข้อมูลที่เป็น ตัวอักษร ในช่อง TextBox2 สูตรจะทำงานค่ะ
แต่ถ้าเป็นข้อมูลที่เป็น ตัวเลข สูตรจะทำงานไม่ได้ค่ะ
มีรูปแนบให้ดูค่ะ
ไม่ทราบว่าเกิดปัญหาที่ตรงไหนค่ะ รบกวนช่วยหาข้อผิดพลาดให้หน่อยนะค่ะ ขอบคุณค่ะ

ปล. Data ที่ใช้งานจริง มีทั้งตัวอักษรและตัวเลขปนกันตามรูปค่ะ ขอบคุณค่ะ

Re: สอบถามเรื่อง Vlookup ใน UserForm ค่ะ

Posted: Tue Mar 15, 2016 9:28 pm
by Premmy
ขอโทษค่ะ รูปไม่ขึ้นค่ะ
Error.jpg

Re: สอบถามเรื่อง Vlookup ใน UserForm ค่ะ

Posted: Tue Mar 15, 2016 9:31 pm
by snasui
:D สำหรับคำถาม VBA ช่วยโพสต์ Code ให้แสดงเป็น Code ดูตัวอย่างกฎตามข้อ 5 ด้านบน :roll: นอกจากนี้ช่วยแนบไฟล์ตัวอย่างมาด้วยจะได้่ช่วยทดสอบได้ครับ

Re: สอบถามเรื่อง Vlookup ใน UserForm ค่ะ

Posted: Tue Mar 15, 2016 11:28 pm
by Premmy
ขอโทษทีค่ะ เอาใหม่นะค่ะ
โค๊ดที่เขียนไว้ค่ะ

Code: Select all

Private Sub TextBox2_AfterUpdate()
If WorksheetFunction.CountIf(Sheet2.Range("A:A"), Me.TextBox2.Value) = 0 Then
MsgBox "No data! Please insert name Correct"
Me.TextBox2.Value = ""
Exit Sub
End If
With Me
TextBox1 = Application.WorksheetFunction.VLookup(TextBox2, Sheet2.Range("Data1"), 2, 0)
End With
End Sub
มีปัญหาที่ว่า เวลาใส่ข้อมูลที่เป็น ตัวอักษร ในช่อง TextBox2 สูตรจะทำงานค่ะ
แต่ถ้าเป็นข้อมูลที่เป็น ตัวเลข สูตรจะทำงานไม่ได้ค่ะ
ไม่ทราบว่าเกิดปัญหาที่ตรงไหนค่ะ รบกวนช่วยหาข้อผิดพลาดให้หน่อยนะค่ะ ขอบคุณค่ะ
มี File แนบค่ะ
Book1.xls
ปล. Data ที่ใช้งานจริง มีทั้งตัวอักษรและตัวเลขปนกันตามรูปค่ะ ขอบคุณค่ะ

Re: สอบถามเรื่อง Vlookup ใน UserForm ค่ะ

Posted: Wed Mar 16, 2016 8:36 am
by DhitiBank
ลองปรับโค้ดเป็นแบบนี้ดูครับ

Code: Select all

Private Sub TextBox2_AfterUpdate()
    Dim vAny As Variant
    If WorksheetFunction.CountIf(Sheet2.Range("A:A"), Me.TextBox2.Text) = 0 Then
            MsgBox "No data! Please insert name Correct"
        Me.TextBox2.Text = ""
        Exit Sub
    End If
    vAny = TextBox2.Text
    Set vAny = Sheet2.Range("a:a").Find(what:=vAny)
    TextBox1.Text = vAny.Offset(0, 1).Value
End Sub
เปลี่ยนจากการใช้ Vlookup เป็นการใช้คำสั่ง Find เพื่อหาตำแหน่งของคำค้น พอเจอแล้วก็ให้เอาค่ามาแสดงใน Textbox1 โดยการเลื่อนแกนด้วย Offset ครับ

ส่วนเรื่อง Error Type Mismatch จากการใช้ Vlookup ผมไม่รู้จะแก้ยังไง (หากจะใช้ Vlookup) รออาจารย์และเพื่อนๆ ท่านอื่นมาตอบครับ

Re: สอบถามเรื่อง Vlookup ใน UserForm ค่ะ

Posted: Wed Mar 16, 2016 9:30 am
by Premmy
DhitiBank wrote:ลองปรับโค้ดเป็นแบบนี้ดูครับ

Code: Select all

Private Sub TextBox2_AfterUpdate()
    Dim vAny As Variant
    If WorksheetFunction.CountIf(Sheet2.Range("A:A"), Me.TextBox2.Text) = 0 Then
            MsgBox "No data! Please insert name Correct"
        Me.TextBox2.Text = ""
        Exit Sub
    End If
    vAny = TextBox2.Text
    Set vAny = Sheet2.Range("a:a").Find(what:=vAny)
    TextBox1.Text = vAny.Offset(0, 1).Value
End Sub
เปลี่ยนจากการใช้ Vlookup เป็นการใช้คำสั่ง Find เพื่อหาตำแหน่งของคำค้น พอเจอแล้วก็ให้เอาค่ามาแสดงใน Textbox1 โดยการเลื่อนแกนด้วย Offset ครับ

ส่วนเรื่อง Error Type Mismatch จากการใช้ Vlookup ผมไม่รู้จะแก้ยังไง (หากจะใช้ Vlookup) รออาจารย์และเพื่อนๆ ท่านอื่นมาตอบครับ

ลองปรับตามที่คุณ DhitiBank แล้วค่ะ ใช้งานได้ดีเลยค่ะ :thup: ขอบพระคุณมากๆ ค่ะ :D

Re: สอบถามเรื่อง Vlookup ใน UserForm ค่ะ

Posted: Wed Mar 16, 2016 7:14 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code
With Me
    If IsNumeric(.TextBox2.Text) Then
        .TextBox1.Text = Application.WorksheetFunction.VLookup(CLng(TextBox2.Text), Sheet2.Range("Data1"), 2, 0)
    Else
        .TextBox1.Text = Application.WorksheetFunction.VLookup(TextBox2.Text, Sheet2.Range("Data1"), 2, 0)
    End If
End With

Re: สอบถามเรื่อง Vlookup ใน UserForm ค่ะ

Posted: Wed Mar 16, 2016 10:39 pm
by DhitiBank
snasui wrote::D ตัวอย่างการปรับ Code ครับ

.TextBox1.Text = Application.WorksheetFunction.VLookup([color=#FF0000]CLng(TextBox2.Text)[/color], Sheet2.Range("Data1"), 2, 0)
ขอบคุณอาจารย์มากครับ ถ้าเป็นตัวเลขก็ต้องแปลงให้เป็นตัวเลขก่อนแบบนี้นี่เอง เหมือนเรื่องวันที่ที่เอามาใช้ใน sumif ใน vba ที่ผมเคยถามเลย แต่นึกไม่ถึงว่าจะต้องทำเหมือนกัน ขอบคุณครับ