Page 1 of 1

การ format ค่าใน combobox เพื่อส่งค่าไป textbox ด้วย Vlookup

Posted: Tue Apr 01, 2014 10:20 am
by voravit
ขอสอบถามปัญหาครับ
ผมตั้งค่าให้ cbx1 เป็นรหัสที่จะใช้ส่งค่าตามเงื่อนไขมาที่ txb1
1. ถ้าตั้งค่ารหัสเป็น ep1 ผล ส่งค่าตามเงื่อนไขมา ได้
2. ถ้าตั้งค่ารหัสเป็น 10-001 โดย พิมพ์เอง ##-### ผล ส่งค่าตามเงื่อนไขมา ได้
1. ถ้าตั้งค่ารหัสเป็น 10001 ผล ส่งค่าตามเงื่อนไขมา ไม่ได้
1. ถ้าตั้งค่ารหัสเป็น 10-001 โดยการ format ที่ custom เป็น 00-000 หรือ ##-### ผล ส่งค่าตามเงื่อนไขมา ไม่ได้

ผมต้องการใช้ เลขที่บัญชีธนาคาร 10 หลัก ในรูปแบบทั่วไป คือ 000-0-00000-0 นำมาเป็นระหัส และ เนื่องจากมีจำนวนมาก ก็เลยต้องการ format ทีเดียว โดยไปตั้งค่าที่ custom
(ผมไม่อยากมาตั้งค่าทีละรหัส คือ '000-0-00000-0 ซึ่งลองทำแล้ว ส่งค่าตามเงื่อนไขมา ได้)
ขอคำแนะนำด้วยครับ ขอบคุณครับ

Re: การ format ค่าใน combobox เพื่อส่งค่าไป textbox ด้วย Vlo

Posted: Tue Apr 01, 2014 12:10 pm
by bank9597
voravit wrote:ขอสอบถามปัญหาครับ
ผมตั้งค่าให้ cbx1 เป็นรหัสที่จะใช้ส่งค่าตามเงื่อนไขมาที่ txb1
1. ถ้าตั้งค่ารหัสเป็น ep1 ผล ส่งค่าตามเงื่อนไขมา ได้
2. ถ้าตั้งค่ารหัสเป็น 10-001 โดย พิมพ์เอง ##-### ผล ส่งค่าตามเงื่อนไขมา ได้
1. ถ้าตั้งค่ารหัสเป็น 10001 ผล ส่งค่าตามเงื่อนไขมา ไม่ได้
1. ถ้าตั้งค่ารหัสเป็น 10-001 โดยการ format ที่ custom เป็น 00-000 หรือ ##-### ผล ส่งค่าตามเงื่อนไขมา ไม่ได้

ผมต้องการใช้ เลขที่บัญชีธนาคาร 10 หลัก ในรูปแบบทั่วไป คือ 000-0-00000-0 นำมาเป็นระหัส และ เนื่องจากมีจำนวนมาก ก็เลยต้องการ format ทีเดียว โดยไปตั้งค่าที่ custom
(ผมไม่อยากมาตั้งค่าทีละรหัส คือ '000-0-00000-0 ซึ่งลองทำแล้ว ส่งค่าตามเงื่อนไขมา ได้)
ขอคำแนะนำด้วยครับ ขอบคุณครับ
ลองปรับโค๊ด ตามนี้ครับ

Code: Select all

Private Sub cbx1_Change()
On Error Resume Next
If IsNumeric(Me.cbx1) Then
With Application.WorksheetFunction
        txb3.Value = .Index(Worksheets("datalist").Range("E3:E18"), .Match(CInt(Me.cbx1), Worksheets("datalist").Range("D3:D18"), 0))
        txb1.Value = .Index(Worksheets("datalist").Range("B3:B18"), .Match(CInt(Me.cbx1), Worksheets("datalist").Range("D3:D18"), 0))
End With
Else
With Application.WorksheetFunction
        txb3.Value = .Index(Worksheets("datalist").Range("E3:E18"), .Match(Me.cbx1, Worksheets("datalist").Range("D3:D18"), 0))
        txb1.Value = .Index(Worksheets("datalist").Range("B3:B18"), .Match(Me.cbx1, Worksheets("datalist").Range("D3:D18"), 0))
End With
End If
If Err <> 0 Then
MsgBox "Please check your code."
End If
End Sub

Re: การ format ค่าใน combobox เพื่อส่งค่าไป textbox ด้วย Vlo

Posted: Tue Apr 01, 2014 5:21 pm
by voravit
ขอบคุณครับ
ผมนำ code ที่ท่านผู้แนะนำ นำมาไปใช้ ได้ผลกับ code เก่า 5 หลัก ครับ แต่พอนำไปใช้ กับ code ที่ต้องใช้จริงที่เป็น 10 หลัก ก็ยังใช้ไม่ได้ครับ รบกวนข้อคำแนะนำเพิ่มเติมครับ

Re: การ format ค่าใน combobox เพื่อส่งค่าไป textbox ด้วย Vlo

Posted: Tue Apr 01, 2014 6:14 pm
by snasui
:D ลองปรับ Code เป็นด้านล่างครับ

Code: Select all

Private Sub cbx1_Change()
    Dim r As Range, rall As Range
    On Error Resume Next
    With Sheets("datalist")
        Set rall = .Range("d3", .Range("d" & .Rows.Count).End(xlUp))
        For Each r In rall
            If Application.IsText(r.Value) Then
                If r.Value = cbx1.Text Then
                    txb3.Text = r.Offset(0, 1).Value
                    Exit For
                End If
            Else
                If r.Value = CLng(cbx1.Text) Then
                    txb3.Text = r.Offset(0, 1).Value
                    Exit For
                End If
            End If
        Next r
    End With
End Sub

Re: การ format ค่าใน combobox เพื่อส่งค่าไป textbox ด้วย Vlo

Posted: Wed Apr 02, 2014 1:06 pm
by voravit
ขอบคุณครับ
ผมนำเอา code ไปปรับใช้กับไฟล์งานจริง ได้ผลตามต้องการแล้วครับ
ผมขออนุญาตแกะ และ ทำความเข้าใจ code ทีละบรรทัด ถ้ามีส่วนใหนที่ไม่เข้าใจ จะขอสอบถามเพิ่มเติมครับ
ขอบคุณครับ