Page 1 of 2

การใช้ Data Validation กับ combo box(Active X)

Posted: Tue Nov 15, 2016 4:16 pm
by sakajohn
ขอสอบถามผู้รู้ครับ
1. ผมใช้ Data Validation ในการทำ list รายชื่อเครื่องที่ใช้พิมพ์ กับ วัตถุดิบ แต่ติดปัญหา คือ เราจะต้องคลิ๊กที่ปุ่ม drop down เพื่อให้แสดงข้อมูลขึ้นมาถึงจะเลือกรายการได้ ถ้าผมต้องการให้ สามารถคีย์ชื่อรายการบางคำแล้วให้รายการแสดงขึ้นมาจะทำได้ไหมครับ
2. ผมลองใช้ combo Box(Active X) มันสามารถพิมพ์แล้วข้อความขึ้นมาได้ แต่ติดตรงที่เราจะต้องมาคลิ๊กที่กล่อง มันถึงจะทำงานได้ ถ้าจะให้มันผสานอยู่ใน cell เลยจะได้ไหมครับ คือเวลาที่คีย์ข้อมูลเราจะกด enter ลงมาเรื่อยๆ พอถึง combo Box ก็สามารถที่จะคีย์ต่อได้เลย โดยไม่ต้องใช้ mouse คลิ๊ก ได้ไหมครับ
3. หรือมีวิธีอื่นๆแนะนำได้ครับ

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Tue Nov 15, 2016 7:29 pm
by Serverchita
ทำตามวิธีข้อ 1 เลยครับ แต่ต้องตั้งค่าตามตัวอย่างรูปภาพครับ

(หรือจะไม่ได้ติ๊กที่ Show ก็ได้นะครับ จะได้ไม่ต้องกดบ่อย)

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Wed Nov 16, 2016 10:58 am
by sakajohn
ขอบคุณคุณServerchita มากครับ แต่มันก็ยังไม่ตอบโจทย์ที่ผมต้องการครับ คือลองทำดูแล้วตอนนี้ก็คือผู้ใช้จะพิมพ์อะไรลงไปก็ได้ซึ่งจะไม่เป็นไปตามที่เรากำหนด ตอนที่ผมยกตัวอย่างคือมันมีแค่ 9 รายการ ถ้ามันมีประมาณ 20 - 30 รายการ ผมต้องการให้พิมพ์บางคำแล้วมันขึ้นมาให้เลือกได้ เหมือนกับการทำ combo box(Active X) ถ้าจะทำแบบวิธีที่2 จะทำได้ไหมครับ

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Wed Nov 16, 2016 3:35 pm
by Serverchita
ต้องรอท่านอื่นมาตอบให้ครับ

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Wed Nov 16, 2016 8:58 pm
by snasui
sakajohn wrote:ขอสอบถามผู้รู้ครับ
1. ผมใช้ Data Validation ในการทำ list รายชื่อเครื่องที่ใช้พิมพ์ กับ วัตถุดิบ แต่ติดปัญหา คือ เราจะต้องคลิ๊กที่ปุ่ม drop down เพื่อให้แสดงข้อมูลขึ้นมาถึงจะเลือกรายการได้ ถ้าผมต้องการให้ สามารถคีย์ชื่อรายการบางคำแล้วให้รายการแสดงขึ้นมาจะทำได้ไหมครับ
2. ผมลองใช้ combo Box(Active X) มันสามารถพิมพ์แล้วข้อความขึ้นมาได้ แต่ติดตรงที่เราจะต้องมาคลิ๊กที่กล่อง มันถึงจะทำงานได้ ถ้าจะให้มันผสานอยู่ใน cell เลยจะได้ไหมครับ คือเวลาที่คีย์ข้อมูลเราจะกด enter ลงมาเรื่อยๆ พอถึง combo Box ก็สามารถที่จะคีย์ต่อได้เลย โดยไม่ต้องใช้ mouse คลิ๊ก ได้ไหมครับ
3. หรือมีวิธีอื่นๆแนะนำได้ครับ
:D ลองศึกษาจาก Link นี้ครับ https://www.extendoffice.com/documents/ ... te.html#a1

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Thu Nov 17, 2016 11:51 am
by sakajohn
snasui wrote:
sakajohn wrote:ขอสอบถามผู้รู้ครับ
1. ผมใช้ Data Validation ในการทำ list รายชื่อเครื่องที่ใช้พิมพ์ กับ วัตถุดิบ แต่ติดปัญหา คือ เราจะต้องคลิ๊กที่ปุ่ม drop down เพื่อให้แสดงข้อมูลขึ้นมาถึงจะเลือกรายการได้ ถ้าผมต้องการให้ สามารถคีย์ชื่อรายการบางคำแล้วให้รายการแสดงขึ้นมาจะทำได้ไหมครับ
2. ผมลองใช้ combo Box(Active X) มันสามารถพิมพ์แล้วข้อความขึ้นมาได้ แต่ติดตรงที่เราจะต้องมาคลิ๊กที่กล่อง มันถึงจะทำงานได้ ถ้าจะให้มันผสานอยู่ใน cell เลยจะได้ไหมครับ คือเวลาที่คีย์ข้อมูลเราจะกด enter ลงมาเรื่อยๆ พอถึง combo Box ก็สามารถที่จะคีย์ต่อได้เลย โดยไม่ต้องใช้ mouse คลิ๊ก ได้ไหมครับ
3. หรือมีวิธีอื่นๆแนะนำได้ครับ
:D ลองศึกษาจาก Link นี้ครับ https://www.extendoffice.com/documents/ ... te.html#a1
ผมลองทำตาม ลิงค์ ที่อาจารย์ให้แล้วครับ มีปัญหาอยากจะถามเพิ่มคือ

1. ตามไฟล์แนบ ถ้าเรา Double click ที่ cell ไหนก็จะมี combo box ขึ้นมา แต่ยังไม่มีรายการใน combobox
2. เรายังต้อง Double click ที่ cell ก่อน combo box ถึงจะโชว์ขึ้นมาใช่ไหมครับ ถ้าเรา enter เฉยๆ มันก็จะไม่โชว์ combo boxใช่ไหมครับ
3. เราจะให้แสดงรายการที่เราต้องการยังไงครับ ตามที่ดูจาก ลิงค์ ไม่ได้บอกวิธี ผมลองกำหนด ที่ property ของ combo box ตรงช่อง Listfillrange ข้อมูลก็ไม่แสดงครับ

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Thu Nov 17, 2016 7:49 pm
by snasui
:D ตัวอย่างการปรับ Code ตามด้านล่างครับ

Code: Select all

    'Other code
    If Target.Validation.Type = 3 Then
        Cancel = True
        xStr = "Sheet1!G9:G12"
        With xCombox
            .Visible = True
            .Left = Target.Left
            .Top = Target.Top
            .Width = Target.Width + 5
            .Height = Target.Height + 5
            .ListFillRange = xStr
            .LinkedCell = Target.Address
        End With
        xCombox.Activate
        Me.TempCombo.DropDown
    End If
    'Other code
sakajohn wrote:2. เรายังต้อง Double click ที่ cell ก่อน combo box ถึงจะโชว์ขึ้นมาใช่ไหมครับ ถ้าเรา enter เฉยๆ มันก็จะไม่โชว์ combo boxใช่ไหมครับ
ถูกต้องครับ
sakajohn wrote:3. เราจะให้แสดงรายการที่เราต้องการยังไงครับ ตามที่ดูจาก ลิงค์ ไม่ได้บอกวิธี ผมลองกำหนด ที่ property ของ combo box ตรงช่อง Listfillrange ข้อมูลก็ไม่แสดงครับ
ปรับ Code ตามด้านบนแล้วทดสอบดูใหม่ครับ

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Thu Nov 17, 2016 9:17 pm
by sakajohn
อาจารย์ครับ ถ้าผมต้องการให้กด enter แล้วโชว์ combo box จะทำได้ไหมครับ

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Thu Nov 17, 2016 9:59 pm
by snasui
:D ทำได้ครับ ปรับ Code ให้เหลือเฉพาะใน Worksheet_SelectionChange กับ TempCombo_KeyDown ส่วน Code อื่นไม่ต้องใช้ โดยต้องปรับ Code ภายใน Procedure นี้เพื่อให้ตรงกับที่ต้องการใช้งานครับ

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Fri Nov 18, 2016 9:08 am
by sakajohn
snasui wrote::D ทำได้ครับ ปรับ Code ให้เหลือเฉพาะใน Worksheet_SelectionChange กับ TempCombo_KeyDown ส่วน Code อื่นไม่ต้องใช้ โดยต้องปรับ Code ภายใน Procedure นี้เพื่อให้ตรงกับที่ต้องการใช้งานครับ
ผมลองปรับ code แล้วครับ ตอนนี้คือ enter แล้วจะขึ้น combo box แต่มันจะไม่ค้างไว้ให้เลือกครับ ไม่ทราบว่าผมต้องปรับ code ตรงไหนเพิ่มหรือเปล่าครับ รบกวนช่วยชี้แนะด้วยครับ

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Fri Nov 18, 2016 6:10 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Private Sub Worksheet_Selectionchange(ByVal Target As Range)
    Dim xStr As String
    Dim xCombox As OLEObject
    Dim xWs As Worksheet
    Set xWs = Application.ActiveSheet
    On Error Resume Next
    Application.EnableEvents = False
    Set xCombox = xWs.OLEObjects("TempCombo")
    With xCombox
        .ListFillRange = ""
        .LinkedCell = ""
        .Visible = False
    End With
    If Target.Validation.Type = 3 Then
        Cancel = True
        xStr = "Sheet1!G9:G12"
        With xCombox
            .Visible = True
            .Left = Target.Left
            .Top = Target.Top
            .Width = Target.Width + 5
            .Height = Target.Height + 5
            .ListFillRange = xStr
            .LinkedCell = Target.Address
        End With
        xCombox.Activate
        Me.TempCombo.DropDown
    End If
    Application.EnableEvents = True
End Sub

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Sat Nov 19, 2016 6:48 pm
by sakajohn
ได้แล้วครับอาจารย์ แต่ถ้าเราจะ lock ให้comboboxขึ้นเฉพาะ cell B2 เท่านั้น เราต้องไปกำหนดที่ตรงไหนครับ แล้วถ้าเราใช้วิธีนี้ ก็จะ protect sheet ไม่ได้ใช่ไหมครับ

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Sat Nov 19, 2016 11:15 pm
by snasui
:D กำหนดให้ขึ้นที่เซลล์ใดก็ต้องเขียนโปรแกรมเพิ่ม ลองเขียนมาเองก่อนครับ

การ Protect สามารถทำได้ตามปกติ คลิกขวาที่ B2 > Format Cells > ที่แถบ Protection ปลดเครื่องหมายที่ Locked > ป้องกันแผ่นงาน

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Sat Nov 19, 2016 11:27 pm
by sakajohn
ต้องเขียนคำสั่งขึ้นมาใหม่เลยใช่ไหมครับ ไม่ได้ไปแก้ไขใน code เดิมใช่ไหมครับ

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Sat Nov 19, 2016 11:31 pm
by snasui
:D เขียนเข้าไปใน Code เดิมครับ ตรวจสอบว่าเซลล์ปัจจุบันเป็นเซลล์เป้าหมายหรือไม่ หากใช่ค่อยขึ้น Object ให้เลือกใช้ เช่นนี้ครับ

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Sun Nov 20, 2016 12:36 am
by sakajohn
snasui wrote::D เขียนเข้าไปใน Code เดิมครับ ตรวจสอบว่าเป็นปัจจุบันเป็นเซลล์เป้าหมายหรือไม่ หากใช่ค่อยขึ้น Object ให้เลือกใช้ เช่นนี้ครับ

Code: Select all

 "other code'
        range("B2").select
        xCombox.Activate
        Me.TempCombo.DropDown
    End If
    Application.EnableEvents = True
End Sub
ผมลองใส่ดูแล้ว กลายเป็นว่าเมื่อ อยู่ที่ B2 combo box จะไม่แสดง ทำไมถึงเป็นอย่างนั้นครับ

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Sun Nov 20, 2016 6:58 am
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

'----Other code----
With xCombox
    .ListFillRange = ""
    .LinkedCell = ""
    .Visible = False
End With
If Target.Address <> [b2].Address Then
    Application.EnableEvents = True
    Exit Sub
End If
'----Other code----

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Sun Nov 20, 2016 11:05 pm
by sakajohn
อาจารย์ครับ ถ้าอยากให้ขึ้น 2 cell เช่น B2 และ B4 ทำได้ไหมครับ ขอถามตรงสูตร If Target.Address <> [b2].Address Then กับ If (Target.Address = range("b2").Address) Then ต่างกันไหมครับ

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Sun Nov 20, 2016 11:22 pm
by snasui
:D กรณี B2 หรือ B4 สามารถใช้ Or เข้ามาช่วยได้ครับ การอ้างอิงตามลักษณะที่ถามมานั้นเหมือนกันครับ

Re: การใช้ Data Validation กับ combo box(Active X)

Posted: Mon Nov 21, 2016 3:38 pm
by DhitiBank
2016-11-21 15_33_40-Microsoft Visual Basic for Applications - combo box.xlsm [break] - [Sheet1 (Code.png
อาจารย์ครับ range.Validation.Type เป็นการเช็คอะไรครับ ทำไมผมลองคีย์ใน immediate window เพื่อดูค่ากลับแสดงค่าผิดพลาดว่า "Application-defined of Object-defined error" ครับ