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

สำหรับคำถาม VBA ช่วยโพสต์ Code ให้แสดงเป็น Code ดูตัวอย่างกฎตามข้อ 5 ด้านบน

นอกจากนี้ช่วยแนบไฟล์ตัวอย่างมาด้วยจะได้่ช่วยทดสอบได้ครับ
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 แล้วค่ะ ใช้งานได้ดีเลยค่ะ

ขอบพระคุณมากๆ ค่ะ

Re: สอบถามเรื่อง Vlookup ใน UserForm ค่ะ
Posted: Wed Mar 16, 2016 7:14 pm
by snasui

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