Page 1 of 1
DropDown UserForm ตามเงื่อนไข
Posted: Wed Apr 08, 2020 1:41 pm
by booky
รบกวนสอบถามผู้รู้ครับ
จากไฟล์ที่แนบมาผมพยายามทำ UserForm โดยกำหนดให้ ComboBox2 เป็น DropDown ซึ่งแปรเปลี่ยนตามเงื่อนไขที่ได้เลือกไว้จากใน ComboBox1 ครับ แต่เมื่อลองดูบางครั้งก็ได้ บางครั้งก็ไม่ได้ จึงอยากขอคำแนะนำด้วยครับ
ขอบคุณครับ
Re: DropDown UserForm ตามเงื่อนไข
Posted: Wed Apr 08, 2020 7:15 pm
by snasui

กรุณาอธิบายให้เห็นถึงปัญหาที่เป็นจะได้ช่วยดูให้ได้ครับ
ComboBox1 เลือกค่าใด เลือกแล้ว ComboBox2 ควรแสดงค่าใด ด้วยเงื่อนไขใดจึงแสดงเช่นนั้น ปัจจุบันผิดพลาดในกรณีใดบ้าง จะได้เข้าถึงปัญหาได้โดยไวครับ
Re: DropDown UserForm ตามเงื่อนไข
Posted: Thu Apr 09, 2020 8:32 am
by booky
สวัสดีครับ
จากไฟล์ที่แนบมาใหม่นี้นะครับ ComboBox1 จะแสดงรายชื่อจาก Range Name "Credit" ส่วน ComboBox2 จะแสดงทางเลือกจาก Range Name "List" ซึ่ง จะ Match "Subject" กับ "Credit" ที่เลือกไว้ครับ เช่น
ถ้า ComboBox1 เลือก Andy / ComboBox2 ก็ควรจะมีข้อมูล AAA,DDD,EEE,GGG,HHH
หรือถ้า ComboBox1 เลือก Bruce / ComboBox2 ก็ควรจะมีข้อมูล BBB,CCC,FFF,III
ปัญหาคือ
1.เมื่อเลือก Option ใน ComboBox1 แล้ว ที่ ComboBox2 บางครั้งก็แสดง Option ตามสูตรที่คำนวณไว้ใน Sheet1 "I2:M10" บางครั้งก็ไม่แสดงหรือบางครั้งก็แสดง Option จากทางเลือกจากครั้งก่อนหน้าไม่อัพเดตตามใน Sheet ครับ
2.เมื่อผมลองลบสิ่งที่เลือกไว้ใน ComboBox2 จะติด Bug ที่สูตร VLookup ครับ
รบกวนขอคำแนะนำด้วยครับ
ขอบคุณสำหรับการตอบกลับครับ
Re: DropDown UserForm ตามเงื่อนไข
Posted: Thu Apr 09, 2020 7:24 pm
by snasui

ตัวอย่างการปรับ Code ที่ ComboBox1_Change ครับ
Code: Select all
Private Sub ComboBox1_Change()
Set data = Sheets("Sheet2").Range("RoomNo.")
Set name = Sheets("Sheet2").Range("Credit")
Dim r As Range
With Application
check = .CountIf(name, ComboBox1.Text)
If ComboBox1.Text <> "" And check > 0 Then
lastrow = .Match(ComboBox1.Text, name, 0)
TextBox1.Text = .Index(data, lastrow, 1)
ComboBox2.Clear
For Each r In data
If r.Value = "" Then Exit For
If r.Value = TextBox1.Text Then
ComboBox2.AddItem r.Offset(0, 1).Value
End If
Next r
Else
TextBox1.Text = ""
End If
End With
ThisWorkbook.Sheets("Sheet1").[G2] = TextBox1.Text
End Sub