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
:D กรุณาอธิบายให้เห็นถึงปัญหาที่เป็นจะได้ช่วยดูให้ได้ครับ

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
:D ตัวอย่างการปรับ 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