:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser
🪷 คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ

สูตร vlookup ใน textbox

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

สูตร vlookup ใน textbox

#1

Post by natthaporn »

เมื่อค่าใน RefBox = A0001
ดิฉันต้องการให้ค่าใน NameBox1 = Apple
และ NameBox2 = Green Apple
ดิฉันได้ทดลองเขียน code ตามด้านล่างคะ แต่ข้อมูลในช่อง Name 1 และ Name 2
ไม่มีอะไรเปลี่ยนแปลงเลยคะ รบกวนอาจารย์ช่วยแนะนำ code ด้วยคะ

Code: Select all

Private Sub NameBox1_Change()		
If RefBox.Value = "" Then		
NameBox1.Value = Application.WorksheetFunction.VLookup(RefBox.Value, Name, 3, False)		
End If		
End Sub		
		

Private Sub NameBox2_Change()
If RefBox.Value = "" Then
NameBox2.Value = Application.WorksheetFunction.VLookup(RefBox.Value, Name, 4, False)
End If
End Sub

You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สูตร vlookup ใน textbox

#2

Post by snasui »

:D ลองดูตัวอย่างการปรับ Code ตามด้านล่างครับ

Code: Select all

Private Sub RefBox_Change()
    On Error Resume Next
    If Len(RefBox.Text) < 5 Then Exit Sub
    With Application.WorksheetFunction
        NameBox1.Value = .VLookup(RefBox.Value, Sheets("Data").Range("Name"), 3, False)
        NameBox2.Value = .VLookup(RefBox.Value, Sheets("Data").Range("Name"), 4, False)
    End With
    If Err <> 0 Then
        MsgBox "Please check your code."
    End If
End Sub
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: สูตร vlookup ใน textbox

#3

Post by natthaporn »

ดิฉันใช้ code ตามที่อาจารย์แนะนำ ได้ผลลัพธ์ตามที่ต้องการแล้วคะ
แต่ดิฉันมีข้อสงสัยอยู่อย่างหนึ่งคือ ทำไมนำ code ไปไว้ที่ RefBox แทนที่จะเขียน code ที่ NameBox1 และ NameBox2
ขอบคุณมากคะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สูตร vlookup ใน textbox

#4

Post by snasui »

:D จาก
natthaporn wrote:เมื่อค่าใน RefBox = A0001
แสดงว่าต้องเขียน Code เพื่อตรวจสอบ Event ที่เกิดจากการเปลี่ยนแปลงของ RefBox ไม่ใช่ไปเช็คที่ Object อื่นครับ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: สูตร vlookup ใน textbox

#5

Post by natthaporn »

ก่อนอื่นต้องขอโทษอาจารย์ด้วยที่ post มาดึกมากคะ และขอขอบคุณมากคะ สำหรับคำอธิบาย
อาจารย์คะ ดิฉันอยากจะรบกวนถามต่อยอดเกียวกับเรื่อง textbox ต่อคะ
คือ ดิฉันต้องการที่จะส่งข้อมูลที่อยู่ใน textbox ไปยัง sheet ที่เป็นที่เก็บข้อมูล
ซึ่งดิฉันได้ลองเขียน code ดังนี้คะ

Code: Select all

Private Sub SaveButton_Click()
Dim i As Integer
If CompanyBox.Value = "A" Then
i = WorksheetFunction.CountA(Worksheets("A").Range("B:B")) + 3

Worksheets("A").Cells(i, 2).Value = RefBox.Value
Worksheets("A").Cells(i, 3).Value = NameBox1.Value
Worksheets("A").Cells(i, 4).Value = NameBox2.Value
'Worksheets("A").Cells(i, 5).Value = GroupBox.Value
'Worksheets("A").Cells(i, 6).Value = TypeBox.Value
'Worksheets("A").Cells(i, 7).Value = AmountBox.Value

End If

If CompanyBox.Value = "B" Then
i = WorksheetFunction.CountA(Worksheets("B").Range("B:B")) + 3

Worksheets("B").Cells(i, 2).Value = RefBox.Value
Worksheets("B").Cells(i, 3).Value = NameBox1.Value
Worksheets("B").Cells(i, 4).Value = NameBox2.Value
'Worksheets("B").Cells(i, 5).Value = GroupBox.Value
'Worksheets("B").Cells(i, 6).Value = TypeBox.Value
'Worksheets("B").Cells(i, 7).Value = AmountBox.Value
End If

End Sub

Private Sub CleardButton_Click()
CompanyBox.Value = ""
RefBox.Value = ""
NameBox1.Value = ""
NameBox2.Value = ""
GroupBox.Value = ""
TypeBox.Value = ""
AmountBox.Value = ""

End Sub

ดิฉันอยากจะรบกวนอาจารย์ดังนี้คะ
1. ดิฉันจะรบกวนอาจารย์แนะนำ code ที่สั้นกว่านี้คะ
2. มี code บางช่วงที่ดิฉันยังเขียนไม่ได้ เช่น
ถ้า GroupBox =1 และ TypeBox = M1 ให้ AmountBox =10
ส่งข้อมูลไปที่ column "E"
หรือถ้า GroupBox =2 และ TypeBox = X1 ให้ AmountBox =10
ส่งข้อมูลไปที่ column "H" เป็นต้นคะ
3.เมื่อ click ปุ่ม "Clear" แล้วให้ cursor วิ่งไปที่ CompanyBox
You do not have the required permissions to view the files attached to this post.
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: สูตร vlookup ใน textbox

#6

Post by natthaporn »

ต้องขอโทษด้วยคะ ที่บอกเงื่อนไขอาจารย์ผิดในครั้งแรกคะ
ดิฉันอยากจะรบกวนอาจารย์เปลี่ยนเงื่อนไข ดังนี้คะ
1. ดิฉันจะรบกวนอาจารย์แนะนำ code ที่สั้นกว่านี้คะ
2. มี code บางช่วงที่ดิฉันยังเขียนไม่ได้ เช่น
ถ้า GroupBox =1 และ TypeBox = M1 ให้ AmountBox =10
ส่งข้อมูลไปที่ column "E"
หรือถ้า GroupBox =2 และ TypeBox = M2 ให้ AmountBox =10
ส่งข้อมูลไปที่ column "J" เป็นต้นคะ
3.เมื่อ click ปุ่ม "Clear" แล้วให้ cursor วิ่งไปที่ CompanyBox

ขอบคุณคะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สูตร vlookup ใน textbox

#7

Post by snasui »

natthaporn wrote:1. ดิฉันจะรบกวนอาจารย์แนะนำ code ที่สั้นกว่านี้คะ
:D ในการเริ่มเขียน VBA นั้น Code ที่สั้นสำคัญน้อยกว่า Code ทำงานถูกต้องครับ ขอให้เขียนให้ทำงานถูกต้องก่อนเป็นอันดับแรก การปรับให้กระชับค่อยทำทีหลังได้
natthaporn wrote:ถ้า GroupBox =1 และ TypeBox = M1 ให้ AmountBox =10
ส่งข้อมูลไปที่ column "E
เราสามารถใช้ And เข้ามาช่วยได้ครับ ยกตัวอย่างเช่น

Code: Select all

If GroupBox.Text = "1" And TypeBox.Text = "M1" Then AmountBox.Text = "10" 
ลองปรับ Code มาดูกันครับ
natthaporn wrote:3.เมื่อ click ปุ่ม "Clear" แล้วให้ cursor วิ่งไปที่ CompanyBox
สามารถใช้ SetForcus เข้ามาช่วยได้ครับ เช่น

Code: Select all

CompanyBox.SetFocus
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: สูตร vlookup ใน textbox

#8

Post by natthaporn »

ลองเขียน code ตามที่อาจารย์แนะนำ แต่ยัง run ไม่ได้คะ

Code: Select all

Private Sub SaveButton_Click()
Dim i As Integer
If CompanyBox.Value = "A" And GroupBox.Text = "1" And TpyeBox.Text = "M1" Then (debug ที่ row นี้คะ)
i = WorksheetFunction.CountA(Worksheets("A").Range("B:B")) + 3

Worksheets("A").Cells(i, 2).Value = RefBox.Value
Worksheets("A").Cells(i, 3).Value = NameBox1.Value
Worksheets("A").Cells(i, 4).Value = NameBox2.Value
Worksheets("A").Cells(i, 5).Value = AmountBox.Value
End If

If CompanyBox.Value = "A" And GroupBox.Text = "1" And TpyeBox.Text = "M2" Then
i = WorksheetFunction.CountA(Worksheets("A").Range("B:B")) + 3

Worksheets("A").Cells(i, 2).Value = RefBox.Value
Worksheets("A").Cells(i, 3).Value = NameBox1.Value
Worksheets("A").Cells(i, 4).Value = NameBox2.Value
Worksheets("A").Cells(i, 6).Value = AmountBox.Value
End If

If CompanyBox.Value = "A" And GroupBox.Text = "1" And TpyeBox.Text = "M3" Then
i = WorksheetFunction.CountA(Worksheets("A").Range("B:B")) + 3

Worksheets("A").Cells(i, 2).Value = RefBox.Value
Worksheets("A").Cells(i, 3).Value = NameBox1.Value
Worksheets("A").Cells(i, 4).Value = NameBox2.Value
Worksheets("A").Cells(i, 7).Value = AmountBox.Value
End If

If CompanyBox.Value = "A" And GroupBox.Text = "2" And TpyeBox.Text = "M1" Then
i = WorksheetFunction.CountA(Worksheets("A").Range("B:B")) + 3

Worksheets("A").Cells(i, 2).Value = RefBox.Value
Worksheets("A").Cells(i, 3).Value = NameBox1.Value
Worksheets("A").Cells(i, 4).Value = NameBox2.Value
Worksheets("A").Cells(i, 9).Value = AmountBox.Value
End If

If CompanyBox.Value = "A" And GroupBox.Text = "2" And TpyeBox.Text = "M2" Then
i = WorksheetFunction.CountA(Worksheets("A").Range("B:B")) + 3

Worksheets("A").Cells(i, 2).Value = RefBox.Value
Worksheets("A").Cells(i, 3).Value = NameBox1.Value
Worksheets("A").Cells(i, 4).Value = NameBox2.Value
Worksheets("A").Cells(i, 10).Value = AmountBox.Value
End If

If CompanyBox.Value = "A" And GroupBox.Text = "2" And TpyeBox.Text = "M3" Then
i = WorksheetFunction.CountA(Worksheets("A").Range("B:B")) + 3

Worksheets("A").Cells(i, 2).Value = RefBox.Value
Worksheets("A").Cells(i, 3).Value = NameBox1.Value
Worksheets("A").Cells(i, 4).Value = NameBox2.Value
Worksheets("A").Cells(i, 11).Value = AmountBox.Value
End If

If CompanyBox.Value = "B" And GroupBox.Text = "1" And TpyeBox.Text = "M1" Then
i = WorksheetFunction.CountA(Worksheets("B").Range("B:B")) + 3

Worksheets("B").Cells(i, 2).Value = RefBox.Value
Worksheets("B").Cells(i, 3).Value = NameBox1.Value
Worksheets("B").Cells(i, 4).Value = NameBox2.Value
Worksheets("B").Cells(i, 5).Value = AmountBox.Value
End If

If CompanyBox.Value = "B" And GroupBox.Text = "1" And TpyeBox.Text = "M2" Then
i = WorksheetFunction.CountA(Worksheets("B").Range("B:B")) + 3

Worksheets("B").Cells(i, 2).Value = RefBox.Value
Worksheets("B").Cells(i, 3).Value = NameBox1.Value
Worksheets("B").Cells(i, 4).Value = NameBox2.Value
Worksheets("B").Cells(i, 6).Value = AmountBox.Value
End If

If CompanyBox.Value = "B" And GroupBox.Text = "1" And TpyeBox.Text = "M3" Then
i = WorksheetFunction.CountA(Worksheets("B").Range("B:B")) + 3

Worksheets("B").Cells(i, 2).Value = RefBox.Value
Worksheets("B").Cells(i, 3).Value = NameBox1.Value
Worksheets("B").Cells(i, 4).Value = NameBox2.Value
Worksheets("B").Cells(i, 7).Value = AmountBox.Value
End If

If CompanyBox.Value = "B" And GroupBox.Text = "2" And TpyeBox.Text = "M1" Then
i = WorksheetFunction.CountA(Worksheets("B").Range("B:B")) + 3

Worksheets("B").Cells(i, 2).Value = RefBox.Value
Worksheets("B").Cells(i, 3).Value = NameBox1.Value
Worksheets("B").Cells(i, 4).Value = NameBox2.Value
Worksheets("B").Cells(i, 9).Value = AmountBox.Value
End If

If CompanyBox.Value = "B" And GroupBox.Text = "2" And TpyeBox.Text = "M2" Then
i = WorksheetFunction.CountA(Worksheets("B").Range("B:B")) + 3

Worksheets("B").Cells(i, 2).Value = RefBox.Value
Worksheets("B").Cells(i, 3).Value = NameBox1.Value
Worksheets("B").Cells(i, 4).Value = NameBox2.Value
Worksheets("B").Cells(i, 10).Value = AmountBox.Value
End If

If CompanyBox.Value = "B" And GroupBox.Text = "2" And TpyeBox.Text = "M3" Then
i = WorksheetFunction.CountA(Worksheets("B").Range("B:B")) + 3

Worksheets("B").Cells(i, 2).Value = RefBox.Value
Worksheets("B").Cells(i, 3).Value = NameBox1.Value
Worksheets("B").Cells(i, 4).Value = NameBox2.Value
Worksheets("B").Cells(i, 11).Value = AmountBox.Value
End If
End Sub

Private Sub ClearButton_Click()
CompanyBox.Value = ""
RefBox.Value = ""
NameBox1.Value = ""
NameBox2.Value = ""
GroupBox.Value = ""
TypeBox.Value = ""
AmountBox.Value = ""
CompanyBox.SetFocus (debug ที่ row นี้คะ)

End Sub

You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สูตร vlookup ใน textbox

#9

Post by snasui »

:D Code Run ไม่ได้เพราะเขียนชื่อ TypeBox ไม่ถูกต้องครับ

เนื่องจากเป็น ActiveX Object บน Excel ไม่มี Property สำหรับการ SetFocus ให้ใช้ Code ตามด้านล่างแทนครับ

Code: Select all

CompanyBox.Activate
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: สูตร vlookup ใน textbox

#10

Post by natthaporn »

สามารถ run ได้แล้วคะ แค่ความจริงแล้วตัวอย่างดังกล่าวเป็นเพียงแค่การ test ซึ่งข้อมูลจริงจะมี sheet ประมาณ 10 sheet มี group มากกว่า 7 group และมี type ประมาณ 15 type
ซึ่งดิฉันคาดว่าจะต้องเขียน code ยาวมากเลยคะ
รบกวนอาจารย์ช่วยเขียน code เป็น guideline ให้หน่อยได้ไหมคะ ดิฉันจะทดลองทำเป็น step ไป เพราะถ้าไม่มีใครแนะนำดิฉันก็ไม่ได้เริ่ม เพราะทุกวันนี้ดิฉันศึกษาด้วยตนเอง โดยการเข้าไปดูตัวอย่างจาก web ต่าง ๆ แต่ก็ไม่เข้าใจทั้งหมดเพราะดืฉันไม่มีโจทย์ เหมือนในครั้งนี้
ขอขอบคุณคะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สูตร vlookup ใน textbox

#11

Post by snasui »

:D ช่วยอธิบายขั้นตอนและเงื่อนไขในการทำงานนี้ครับ ต้องการนำข้อมูลจากไหนไปไหน ด้วยเงือนไขใดบ้าง เพื่อจะได้เข้าใจตรงกัน

ปกติ Excel สามารถใช้สูตรในการดึงข้อมูลโดยดูเงื่อนไขจากเซลล์ได้เลย ไม่จำเป็นต้องใช้ TextBox และ Code VBA เข้ามาช่วย ไม่ทราบว่ามีข้อจำกัดใดจึงได้ใช้ VBA ในการทำงานนี้ครับ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: สูตร vlookup ใน textbox

#12

Post by natthaporn »

ปกติแล้วถ้าเป็นตัวเลขหรือText ที่มีรายละเอียดไม่ซับซ้อน ดิฉันจะใช้สูตรใน excel ในการดึงข้อมูล
แต่เหตุผลที่ดิฉันต้องนำ code มาช่วย เนื่องจากเป็นการทำงานโดยการคีย์ข้อมูลเข้าใน excel file ตรง ๆ
โดย source นั้นมาจาก hard copy และรายละเอียดที่คีย์เป็นตัวอักษรยาว 30-80 character (NameText1
และ NameTex2) ซึ่งดิฉันต้องขอโทษด้วยที่ไม่สามารถส่งให้อาจารย์ดูได้เนื่องจากข้อมูลดังกล่าวเป็น
ความลับของบริษัทคะ
โดยที่ดิฉันได้เก็บข้อมูลของ NameText1 และ NameText2 ที่มีประมาณ 1,000 กว่าแถวไว้ที่ sheet ("data")
ซึ่งดิฉันสร้าง form นี้ขึ้นมาก็เพื่อ update การเปลี่ยนแปลงตัวเลขของ Amount เข้าไปใน sheet A,B,…..
ตาม hard copy ที่หน่วยงานอื่นส่งเข้ามา
ซึ่งตามจริงแล้ว Box ที่จะต้องคีย์มีมากกว่านี้อีกคะ นี้เป็นเพียงตัวอย่างเท่านั้นคะ

โดยมีเงื่อนไขดังนี้คะ
1. CompanyBox = A,B,C หรือ D
2. GroupBox = 1,2,3 หรือ 4
3. TypeBox = M1,M2 หรือ M3

ยกตัวอย่างเช่น ถ้าที่ CompanyBox = A และ GroupBox = 2 และ TypeBox = M3 เมื่อกด save แล้ว
ให้ค่าที่ save รายการที่ 1 ไปแสดงที่ row แรกต่อจาก header
ให้ค่าที่อยู่ใน CodeBox ไปแสดงที่ sheet = A ที่ cell = B4
ให้ค่าที่อยู่ใน NameBox1 ไปแสดงที่ sheet = A ที่ cell = C4
ให้ค่าที่อยู่ใน NameBox2 ไปแสดงที่ sheet = A ที่ cell = D4
ให้ค่าที่อยู่ใน AmountBox ไปแสดงที่ sheet = A ที่ cell = K4
เมื่อกด clear ให้ลบข้อมูลที่อยู่ใน Box ทั้งหมด แล้วให้ curser ไปอยู่ที่ CompanyBox

ถ้าที่ CompanyBox = A และ GroupBox = 1 และ TypeBox = M2 เมื่อกด save แล้ว
ให้ค่าที่ save รายการที่ 2 ไปต่อท้ายรายการที่ 1 โดย
ให้ค่าที่อยู่ใน CodeBox ไปแสดงที่ sheet = A ที่ cell = B5
ให้ค่าที่อยู่ใน NameBox1 ไปแสดงที่ sheet = A ที่ cell = C5
ให้ค่าที่อยู่ใน NameBox2 ไปแสดงที่ sheet = A ที่ cell = D5
ให้ค่าที่อยู่ใน AmountBox ไปแสดงที่ sheet = A ที่ cell = F5
เมื่อกด clear ให้ลบข้อมูลที่อยู่ใน Box ทั้งหมด แล้วให้ curser ไปอยู่ที่ CompanyBox

ถ้าที่ CompanyBox = B และ GroupBox = 1 และ TypeBox = M2 เมื่อกด save แล้ว
ให้ค่าที่ save รายการที่ 1 ไปแสดงที่ row แรกต่อจาก header
ให้ค่าที่อยู่ใน CodeBox ไปแสดงที่ sheet = A ที่ cell = B4
ให้ค่าที่อยู่ใน NameBox1 ไปแสดงที่ sheet = A ที่ cell = C4
ให้ค่าที่อยู่ใน NameBox2 ไปแสดงที่ sheet = A ที่ cell = D4
ให้ค่าที่อยู่ใน AmountBox ไปแสดงที่ sheet = A ที่ cell = F4

และถ้า save รายการที่ 2, 3,…. ก็ให้ต่อท้ายไปเรื่อย ๆ คะ
ขอรบกวนอาจารย์ด้วยนะคะ ขอบคุณคะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สูตร vlookup ใน textbox

#13

Post by snasui »

natthaporn wrote:ถ้าที่ CompanyBox มีค่าเป็น B และ GroupBox = 1 และ TypeBox = M2 เมื่อกด save แล้ว
ให้ค่าที่ save รายการที่ 1 ไปแสดงที่ row แรกต่อจาก header
ให้ค่าที่อยู่ใน CodeBox ไปแสดงที่ sheet = A ที่ cell = B4
ให้ค่าที่อยู่ใน NameBox1 ไปแสดงที่ sheet = A ที่ cell = C4
ให้ค่าที่อยู่ใน NameBox2 ไปแสดงที่ sheet = A ที่ cell = D4
ให้ค่าที่อยู่ใน AmountBox ไปแสดงที่ sheet = A ที่ cell = F4
:D CompanyBox กับชีทต่าง ๆ สัมพันธ์กันอย่างไร เหตุใด CompanyBox ค่าเป็น B แต่นำไปวางในชีท A ครับ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: สูตร vlookup ใน textbox

#14

Post by natthaporn »

ต้องขอโทษด้วยคะ จริง ๆ แล้วต้องเป็น sheet = B
สงสัยดิฉันต้องเปลี่ยนแว่นใหม่แล้วคะ เพราะเห็น A เป็น B แล้ว
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สูตร vlookup ใน textbox

#15

Post by snasui »

:lol: ลองดูตัวอย่างการปรับ Code ตามด้านล่างครับ

Code: Select all

Private Sub SaveButton_Click()
    Dim groupCol As Integer
    Dim Comp As String
    Dim gNum As Integer
    Dim lastRow As Long
    Comp = CompanyBox.Text
    groupCol = Application.Match("Group" & GroupBox.Text, Sheets(Comp).Range("2:2"), 0)
    gNum = Application.Match(TypeBox.Text, Sheets(Comp).Range("E3:H3"), 0) - 1
    lastRow = Sheets(Comp).Range("B" & Rows.Count).End(xlUp).Row + 1
    If Sheets(Comp).Range("B4") = "" Then lastRow = lastRow + 1
    With Worksheets(Comp)
        .Cells(lastRow, 2).Value = RefBox.Value
        .Cells(lastRow, 3).Value = NameBox1.Value
        .Cells(lastRow, 4).Value = NameBox2.Value
        .Cells(lastRow, groupCol + gNum).Value = AmountBox.Value
    End With
End Sub
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: สูตร vlookup ใน textbox

#16

Post by natthaporn »

สามารถ run กับ file ตัวอย่างได้แล้วคะ แต่ดิฉันจะขอศึกษา code ที่อาจารย์แนะนำมาให้เข้าใจก่อน ก่อนที่จะนำไปปรับใช้กับข้อมูลจริง
ต้องขอขอบคุณอาจารย์มากคะ และดิฉันจะคำแนะนำของอาจารย์มาใช้เพื่อให้เกิดประโยชน์ในการทำงานของตัวดิฉันเองและเพื่อนร่วมงานคะ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: สูตร vlookup ใน textbox

#17

Post by natthaporn »

เรียน อาจารย์ ดิฉันได้พยายามปรับ code อยู่หลายรอบแล้ว แต่ก็ไม่ประสบผลสำเร็จ ดิฉันเข้าใจความหมาย
ใน code ที่อาจารย์เขียนนะคะ อาจเป็นเพราะดิฉันเริ่มเขียนจาก code ที่ยาว ๆ ก่อน แต่อาจจะยังไม่เข้าใจทั้งหมด
จึงทำให้ไม่สามารถปรับ code ของอาจารย์มาใช้กับ file จริงได้คะ
ดิฉันขอรบกวนอาจารย์อีกครั้งนะคะ

Code: Select all

Private Sub SaveButton_Click()
    Dim Region As string  (debug)
    Dim ProductCol As String (debug)
    Dim gNum As Integer (debug)
    Dim lastRow As Long (debug)
    Region = RegioncomboBox.text (debug)
    ProductCol = Application.Match(ProductcomboBox.Text, Sheets(Region).Range("4:4"), 0) (debug)
    gNum = Application.Match(Competitorcombobox.Text, Sheets(Region).Range("I5:S5"), 0) - 1 (debug)
    lastRow = Sheets(Region).Range("B" & Rows.Count).End(xlUp).Row + 1 (debug)
    if Sheets(Region).Range("B6") = "" Then lastRow = lastRow + 1 (debug)
    With Worksheets(Region) (debug)
        .Cells(lastRow, 2).Value = DateComboBox.Value (debug)
        .Cells(lastRow, 3).Value = SectionComboBox.Value
        .Cells(lastRow, 4).Value = CustomerComboBox1.Value
        .Cells(lastRow, 5).Value = CustomerComboBox2.Value
        .Cells(lastRow, 6).Value = Referencecomcobox.Value (debug)
        .Cells(lastRow, 7).Value = NameTextBox1.Value
        .Cells(lastRow, 8).Value = NameTextBox2.Value (debug)
        .Cells(lastRow, productCol + gNum).Value = AmountTextBox.Value
    end With (debug)

End Sub

You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สูตร vlookup ใน textbox

#18

Post by snasui »

:D Code ที่เขียนตามไฟล์แนบมีอักขระส่วนเกินปนอยู่ด้านหน้าแทบทุกบรรทัด จึงทำให้ Code แสดงเป็นสีแดง

การแก้ไข ให้ทำการลบอักขระด้านหน้าของทุกบรรทัดทิ้งไป จนกระทั่งแต่ละ Code มาชิดด้านหน้าสุดของบรรทัด แล้วค่อยปรับการเยื้องใหม่ตามต้องการ

Referencecomcobox ใน Code เขียนไม่ถูกต้อง ตัว c ต้องเปลี่ยนเป็นตัว b

และถึงแม้จะปรับสูตรให้ทำงานได้แล้ว แต่ Code ยังบันทึกผิดบรรทัด ทั้งนี้เพราะว่ามีคำว่า Total ในคอลัมน์ B ของทุกชีท เป็นอุปสรรคการทำงานของตัวแปร lastRow ลองปรับ Code ดูเองก่อนครับ

ในโอกาสต่อไป Code ใดที่ต้องการใช้งานแต่ทำงานไม่ถูกต้อง จะต้องไม่ Mark Comment ไว้ด้านหน้า ให้ Mark ไว้ด้านบนหรือด้านหลังแทนครับ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: สูตร vlookup ใน textbox

#19

Post by natthaporn »

ลองปรับ code และ file ตามที่อาจารย์แนะนำ สามารถ run ได้แล้วคะ ส่วนเรื่องการ mark code ในครั้งหน้าจะทำตามที่
อาจารย์แนะนำคะ
ขอขอบคุณอาจารย์อย่างยิ่งคะ
Post Reply