Page 1 of 2
สอบถาม VLookup ข้าม Workbook ครับ
Posted: Tue Jul 24, 2018 1:49 pm
by Leng
รบกวนอาจารย์หน่อยครับพอดีผมต้องการ VLookup ข้าม workbook โดย ให้ ไฟล์ fainal-copy ดึงข้อมูลจาก Datax มาครับ
Code: Select all
Private Sub TextBox5_AfterUpdate()
If Me.TextBox5.Text = "" Then Exit Sub
If WorksheetFunction.CountIf(Sheets("Data").Range("A:A"), Me.TextBox5.Value) = 0 Then
'Me.TextBox5.Value = ""
MsgBox "Not found."
Exit Sub
End If
emptyrow = WorksheetFunction.CountA(Range("A:A")) + 1
With Me
.TextBox6 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 2, 0)
.TextBox7 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 3, 0)
.TextBox8 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 4, 0)
End With
With Worksheets("IN")
.Cells(emptyrow, 1).Value = TextBox1.Value
.Cells(emptyrow, 2).Value = TextBox2.Value
.Cells(emptyrow, 3).Value = TextBox4.Value
.Cells(emptyrow, 4).Value = ComboBox1.Value
.Cells(emptyrow, 5).Value = TextBox5.Value
.Cells(emptyrow, 6).Value = TextBox6.Value
.Cells(emptyrow, 7).Value = TextBox7.Value
.Cells(emptyrow, 8).Value = TextBox8.Value
.Cells(emptyrow, 9).Value = TextBox9.Value
End With
End Sub
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Tue Jul 24, 2018 7:44 pm
by snasui

กำหนดตัวแปรให้กับช่วงข้อมูลของข้อมูลต้นแหล่งที่จะนำมาใช้ใน Vlookup
ตัวอย่างเช่น
Code: Select all
dim rngVlp as range
with workbooks("DataX.xlsx").worksheets(1)
set rngVlp = .range("a2",.range("z" & .rows.count).end(xlup))
end with
me.textbox1.text = application.vlookup(clng(me.textbox5.text),rngVlp,2,0)
ลองเทียบเคียงและปรับ Code ดูก่อน ติดตรงไหนค่อยถามกันต่อครับ
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Wed Jul 25, 2018 9:10 am
by Leng
ติดตรง With Workbooks ครับ ไม่สามารถrun ได้
Code: Select all
Private Sub TextBox5_AfterUpdate()
Dim rngVlp As Range
With Workbooks("C:\Users\Administrator\Desktop\Test\DataX.xlsx").worksheets(sheet1)
Set rngVlp = .Range("A", .Range("D" & .Rows.Count).End(xlUp))
'Me.TextBox5.Value = ""
MsgBox "Not found."
Exit Sub
emptyrow = WorksheetFunction.CountA(Range("A:A")) + 1
End With
Me.TextBox6.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 2, 0)
Me.TextBox7.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 3, 0)
Me.TextBox8.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 4, 0)
With Worksheets("IN")
.Cells(emptyrow, 1).Value = TextBox1.Value
.Cells(emptyrow, 2).Value = TextBox2.Value
.Cells(emptyrow, 3).Value = TextBox4.Value
.Cells(emptyrow, 4).Value = ComboBox1.Value
.Cells(emptyrow, 5).Value = TextBox5.Value
.Cells(emptyrow, 6).Value = TextBox6.Value
.Cells(emptyrow, 7).Value = TextBox7.Value
.Cells(emptyrow, 8).Value = TextBox8.Value
.Cells(emptyrow, 9).Value = TextBox9.Value
End With
End Sub
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Wed Jul 25, 2018 9:26 am
by logic
เปิด DataX.xlsx ขึ้นมาก่อน พอเปิดแล้วก็เขียน with แบบที่อาจารย์แนะนำ
.worksheets(sheet1) ต้องครอบฟันหนูที่ sheet1 ครับ
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Wed Jul 25, 2018 1:20 pm
by Leng
Code: Select all
Private Sub TextBox5_AfterUpdate()
Dim rngVlp As Range
With Workbooks("DataX.xlsx").Worksheets("Sheet1")
Set rngVlp = .Range("A1", .Range("D1048576" & .Rows.Count).End(xlUp))
End With
Me.TextBox6.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 2, 0)
Me.TextBox7.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 3, 0)
Me.TextBox8.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 4, 0)
With Worksheets("IN")
.Cells(emptyrow, 1).Value = TextBox1.Value
.Cells(emptyrow, 2).Value = TextBox2.Value
.Cells(emptyrow, 3).Value = TextBox4.Value
.Cells(emptyrow, 4).Value = ComboBox1.Value
.Cells(emptyrow, 5).Value = TextBox5.Value
.Cells(emptyrow, 6).Value = TextBox6.Value
.Cells(emptyrow, 7).Value = TextBox7.Value
.Cells(emptyrow, 8).Value = TextBox8.Value
.Cells(emptyrow, 9).Value = TextBox9.Value
End With
End Sub
จากที่ได้ลองทำตามครับ ขึ้น Error ตรง With Workbooks("DataX.xlsx").Worksheets("Sheet1") ครับ
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Wed Jul 25, 2018 6:17 pm
by snasui

ผมทดสอบแล้วไม่พบว่าติดปัญหาครับ
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Thu Jul 26, 2018 9:02 am
by Leng
รบกวนอาจารย์ช่วยดูหน่อยครับพอผมใช้ปืน scan และทำตามที่อาจารย์บอกก็ยังไม่สามรถ run ได้ครับ
Code: Select all
Private Sub TextBox5_AfterUpdate()
Dim rngVlp As Range
With Workbooks("C:\Users\Administrator\Desktop\Test\DataX.xlsx").Worksheets("Sheet1")
Set rngVlp = .Range("A2", .Range("D1048576" & .Rows.Count).End(xlUp))
End With
Me.TextBox6.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 2, 0)
Me.TextBox7.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 3, 0)
Me.TextBox8.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 4, 0)
With Worksheets("IN")
.Cells(emptyrow, 1).Value = TextBox1.Value
.Cells(emptyrow, 2).Value = TextBox2.Value
.Cells(emptyrow, 3).Value = TextBox4.Value
.Cells(emptyrow, 4).Value = ComboBox1.Value
.Cells(emptyrow, 5).Value = TextBox5.Value
.Cells(emptyrow, 6).Value = TextBox6.Value
.Cells(emptyrow, 7).Value = TextBox7.Value
.Cells(emptyrow, 8).Value = TextBox8.Value
.Cells(emptyrow, 9).Value = TextBox9.Value
End With
End Sub
Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox5.Value <> "" Then
Cancel = True
TextBox5.Text = ""
End If
End Sub
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Thu Jul 26, 2018 7:29 pm
by snasui

เปลี่ยน
With Workbooks("C:\Users\Administrator\Desktop\Test\DataX.xlsx").Worksheets("Sheet1") เป็น
With Workbooks("DataX.xlsx").Worksheets("Sheet1") และต้องเปิดไฟล์ DataX.xlsx ขึ้นมาก่อน
rngVlp ก็ต้อง Set หรือกำหนดค่า ให้เป็นช่วงข้อมูล มีลักษณะเป็นตารางไม่ใช่คอลัมน์เดี่ยว ดูตัวอย่างที่ผมตอบไปครับ
เปลี่ยนแล้วติดตรงไหนค่อยนำมาถามกัน จะได้ตอบต่อไปจากนั้นครับ
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Mon Jul 30, 2018 11:01 am
by Leng
อาจารย์ครับผมเปิดไฟล์ DataX ขึ้นมาแล้วแล้วก็ได้แก้โค๊ดแล้ว แต่ก็ยังไม่สามารถ run ได้ยู่ดี แครับ
ขึ้นerror ตรง
Code: Select all
With Workbooks("DataX.xlsx").Worksheets("Sheet1")
Code: Select all
Private Sub TextBox5_AfterUpdate()
Dim rngVlp As Range
With Workbooks("DataX.xlsx").Worksheets("Sheet1")
Set rngVlp = .Range("a2", .Range("z" & .Rows.Count).End(xlUp))
End With
Me.TextBox6.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 2, 0)
Me.TextBox7.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 3, 0)
Me.TextBox8.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 4, 0)
With Worksheets("IN")
.Cells(emptyrow, 1).Value = TextBox1.Value
.Cells(emptyrow, 2).Value = TextBox2.Value
.Cells(emptyrow, 3).Value = TextBox4.Value
.Cells(emptyrow, 4).Value = ComboBox1.Value
.Cells(emptyrow, 5).Value = TextBox5.Value
.Cells(emptyrow, 6).Value = TextBox6.Value
.Cells(emptyrow, 7).Value = TextBox7.Value
.Cells(emptyrow, 8).Value = TextBox8.Value
.Cells(emptyrow, 9).Value = TextBox9.Value
End With
End Sub
Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox5.Value <> "" Then
Cancel = True
TextBox5.Text = ""
End If
End Sub
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Mon Jul 30, 2018 11:09 am
by snasui

แนบไฟล์ล่าสุดทั้งหมดมาด้วยจะได้ช่วยดูให้ได้ครับ
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Mon Jul 30, 2018 11:24 am
by Leng
ไฟล์ครับ
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Mon Jul 30, 2018 12:32 pm
by snasui

ตัวอย่าง Code ครับ
Code: Select all
'Other code...
With Workbooks("DataX.xlsx").Worksheets("Sheet1")
Set rngVlp = .Range("a2", .Range("d" & .Rows.Count).End(xlUp))
Me.TextBox6.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 2, 0)
Me.TextBox7.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 3, 0)
Me.TextBox8.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 4, 0)
End With
With ThisWorkbook.Worksheets("IN")
emptyrow = .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).Row
'Other code...
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Mon Jul 30, 2018 1:19 pm
by Leng
ตอนนี้สามารถดึงข้อมูลจาก ไฟล์ DataX ได้ละครับแต่
ติดปัญาคือ
-ไม่สามารถ run ต่อๆกันได้ครับ
- ผมอยากให้ขึ้นถ้าไม่มีข้อมูลว่า "Not found"
Code: Select all
Private Sub TextBox5_AfterUpdate()
Dim rngVlp As Range
With Workbooks("DataX.xlsx").Worksheets("Sheet1")
Set rngVlp = .Range("a2", .Range("d" & .Rows.Count).End(xlUp))
If Me.TextBox5.Text = "" Then Exit Sub
If WorksheetFunction.CountIf(Workbooks("DataX.xlsx").Worksheets("Sheet1").Range("A:D"), Me.TextBox5.Value) = 0 Then
'Me.TextBox5.Value = ""
MsgBox "Not found."
Exit Sub
End If
Me.TextBox6.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 2, 0)
Me.TextBox7.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 3, 0)
Me.TextBox8.Text = Application.VLookup(CLng(Me.TextBox5.Text), rngVlp, 4, 0)
End With
With ThisWorkbook.Worksheets("IN")
emptyrow = .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).Row
End With
With Worksheets("IN")
.Cells(emptyrow, 1).Value = TextBox1.Value
.Cells(emptyrow, 2).Value = TextBox2.Value
.Cells(emptyrow, 3).Value = TextBox4.Value
.Cells(emptyrow, 4).Value = ComboBox1.Value
.Cells(emptyrow, 5).Value = TextBox5.Value
.Cells(emptyrow, 6).Value = TextBox6.Value
.Cells(emptyrow, 7).Value = TextBox7.Value
.Cells(emptyrow, 8).Value = TextBox8.Value
.Cells(emptyrow, 9).Value = TextBox9.Value
End With
End Sub
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Mon Jul 30, 2018 2:24 pm
by snasui

จาก Code ในโพสต์ #13 ปัจจุบันติดปัญหาตรงไหน อย่างไร ช่วยแจ้งรายละเอียดมาด้วยครับ

Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Mon Jul 30, 2018 2:46 pm
by Leng
จากโพสต์ #13 คือติดปัญหาคือไม่สามารถ run ข้อมูลที่คีย์ลงต่อๆกันได้ครับ
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Mon Jul 30, 2018 2:49 pm
by snasui

อธิบายคำว่า "ไม่สามารถ run ข้อมูลที่คีย์ต่อ ๆ กันได้" มาอีกรอบว่ามีลักษณะเป็นอย่างไร
เกิดปัญหาอะไร โปรแกรมฟ้องว่าอย่างไร ฯลฯ ครับ
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Mon Jul 30, 2018 2:55 pm
by Leng
ข้อมูลที่คีย์ลงใน user from รอบที่ 2 เวลา scan ข้อมูลก็จะบันทึกทับกับข้อมูลอันที่ scan รอบ 1 ครับ ข้อมูลไม่บันทึกลงต่อๆกันครับ
"ตัว code ไม่มีปัญหาครับ"
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Mon Jul 30, 2018 3:19 pm
by snasui

จาก Code
emptyrow = .Range("a" & .Rows.Count).End(xlUp).Offset(1, 0).Row ตัวแปร emptyrow เป็นการหาเซลล์ว่างเซลล์แรกในคอลัมน์ A หลังจากมีข้อมูล ดังนั้น คอลัมน์ A จะต้องมีข้อมูลทุกครั้งที่มีการบันทึก ห้ามเป็นเซลล์ว่าง ไม่เช่นนั้นต้องไปหาคอลัมน์ใด ๆ ที่มีข้อมูลอยู่ทุกบรรทัดมาใช้แทนครับ
Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Mon Jul 30, 2018 3:36 pm
by Leng
ได้แล้วครับ ขอบคุณอาจารย์มากครับ

Re: สอบถาม VLookup ข้าม Workbook ครับ
Posted: Mon Jul 30, 2018 3:46 pm
by Leng
ขอถามเพิ่มเติมครับ
ผมต้องการเปิด 2 ไฟล์นี้พร้อมกันครับ โดยเปิดที่ final copy แล้วให้เปิดเป็นไฟล์ DataX.xlsx ขึ้นตามแล้วให้ขึ้น Userfrom ที่อยู่ในไฟลล์ final copy ครับ
แต่ปัญหาคือ
- สามารถเปิดได้ แต่โค๊ดขึ้น error เนื่องจาก พอเปิดไฟล์ final copy แล้วไปเปิด DataX.xlsx ตามทำให้หา Userfrom ไม่เจอครับ
Code: Select all
Private Sub Workbook_Open()
Worksheets("IN").Select
Workbooks.Open Filename:="C:\Users\Administrator\Desktop\Test\DataX.xlsx"
ADD.Show
Application.DisplayFullScreen = True
Application.CommandBars("Full Screen").Visible = False
End Sub