Page 1 of 1

Code VBA ค้นหาข้อมูลบนฟอร์ม

Posted: Sun Jul 25, 2021 12:08 pm
by KHAMTUNM
เรียน ทุกท่าน
ผมทำฟอร์มสำหรับบันทึก รับ-คืน วัสดุอุปกรณ์,ฟอร์มบันทึก(UserForm1)ทำได้แล้ว(ศึกษาในInternet)แต่ฟอร์มค้นหาเพื่อแก้ไข(UserForm2)ยังทำไม่ได้โดยค้นหาข้อมูลจาก Item no.ให้ข้อมูลขึ้นมาบนฟอร์มทั้งหมดจึงอยากให้ช่วยปรับCodeให้ถูกต้องด้วยครับ
ขอบคุณครับ.

Code: Select all

Private Sub ComboBox6_Change()
    Dim q, p As Integer
    q = Application.WorksheetFunction.CountA(Sheet1.Range("A2:Z2")) - 1
    For p = 1 To q
        UserForm2("textbox" & p).Value = _
        Application.WorksheetFunction.VLookup(ComboBox6.Value, Sheet1.Range("A3:K20"), p + 1, 0)
    Next p
    UserForm2.TextBox4.Text = Format(UserForm2.TextBox4.Text, "dd-mmm-yy")
    UserForm2.TextBox5.Text = Format(UserForm2.TextBox5.Text, "dd-mmm-yy")
    UserForm2.TextBox6.Text = Format(UserForm2.TextBox6.Text, "dd-mmm-yy")
    
End Sub
Private Sub CommandButton1_Click()
Dim y As Long
Dim x As Integer
     x = MsgBox("Do you want to update?", vbOKCancel, "Progam")
 If x = vbOK Then
    y = Application.Match(Me.ComboBox6.Text, Range("C3:C20"), 0)
  Cells(y, 1) = ComboBox1.Text
    Cells(y, 2) = ComboBox2.Text
    Cells(y, 3) = ComboBox6.Text
    Cells(y, 4) = TextBox2.Text
    Cells(y, 5) = TextBox3.Text
    Cells(y, 6) = ComboBox3.Text
    Cells(y, 7) = ComboBox4.Text
    Cells(y, 8) = ComboBox5.Text
    Cells(y, 9) = Application.Text(TextBox4.Text, "dd/mm/yyyy")
    Cells(y, 10) = Application.Text(TextBox5.Text, "dd/mm/yyyy")
    Cells(y, 11) = Application.Text(TextBox6.Text, "dd/mm/yyyy")
    Else
         Dim q, p As Long
        q = Application.WorksheetFunction.CountA(Sheet1.Range("A2:Z2")) - 1
        For p = 1 To q
        Me("textbox" & p).Value = Application.WorksheetFunction.VLookup(ComboBox6.Value, Sheet1.Range("A3:K20"), p + 1, 0)
        Next p
    End If
End Sub

Re: Code VBA ค้นหาข้อมูลบนฟอร์ม

Posted: Sun Jul 25, 2021 2:25 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Private Sub ComboBox6_Change()
    Dim q As Integer, p As Integer
    Dim ra As Range, r As Range
    With Worksheets("Sheet1")
        Set ra = .Range("c3", .Range("c" & .Rows.Count).End(xlUp))
        If Application.CountIfs(ra, Me.ComboBox6.Value) = 0 Then Exit Sub
        q = Application.Match(Val(Me.ComboBox6.Value), ra, 0)
    End With
    With Me
        .TextBox2.Value = ra(q).Offset(0, 1).Value
        .TextBox3.Value = ra(q).Offset(0, 2).Value
        'Other code
    End With
End Sub
ตรง 'Other code คือ Code อื่นใดที่เหลือซึ่งจะต้องเขียนเพิ่มเข้าไปเองครับ

Re: Code VBA ค้นหาข้อมูลบนฟอร์ม

Posted: Mon Jul 26, 2021 11:03 am
by KHAMTUNM
:thup: ค้นหาข้อมูลได้แล้วครับ

Code: Select all

Private Sub ComboBox6_Change()
    Dim q As Integer, p As Integer
    Dim ra As Range, r As Range
    With Worksheets("Sheet1")
        Set ra = .Range("c3", .Range("c" & .Rows.Count).End(xlUp))
        If Application.CountIfs(ra, Me.ComboBox6.Value) = 0 Then Exit Sub
        q = Application.Match(Val(Me.ComboBox6.Value), ra, 0)
    End With
    With Me
        .TextBox2.Value = ra(q).Offset(0, 1).Value
        .TextBox3.Value = ra(q).Offset(0, 2).Value
        .ComboBox3.Value = ra(q).Offset(0, 3).Value
        .ComboBox4.Value = ra(q).Offset(0, 4).Value
        .ComboBox5.Value = ra(q).Offset(0, 5).Value
        .TextBox4.Value = ra(q).Offset(0, 6).Value
        .TextBox5.Value = ra(q).Offset(0, 7).Value
        .TextBox6.Value = ra(q).Offset(0, 8).Value
         .ComboBox1.Value = ra(q).Offset(0, -2).Value
          .ComboBox2.Value = ra(q).Offset(0, -1).Value
    End With
        UserForm2.TextBox4.Text = Format(UserForm2.TextBox4.Text, "dd/mm/yy")
        UserForm2.TextBox5.Text = Format(UserForm2.TextBox5.Text, "dd/mm/yy")
        UserForm2.TextBox6.Text = Format(UserForm2.TextBox6.Text, "dd/mm/yy")
End Sub

Re: Code VBA ค้นหาข้อมูลบนฟอร์ม

Posted: Mon Jul 26, 2021 11:09 am
by KHAMTUNM
ขอถามเพิ่ม คือเมื่อค้นหาข้อมูลมาจะทำการแก้ไขที่ ComboBox5,TextBox4,TextBox5,TextBox6 แล้วกดคำสั่ง Update บนฟอร์ม จะแก้ไข Code ยังไงรบกวนช่วยด้วยครับ.

Code: Select all

Private Sub CommandButton1_Click()
Dim y As Long
Dim x As Integer
     x = MsgBox("Do you want to update?", vbOKCancel, "Progam")
 If x = vbOK Then
    y = Application.Match(Me.ComboBox6.Text, Range("C3:C20"), 0)
  Cells(y, 1) = ComboBox1.Text
    Cells(y, 2) = ComboBox2.Text
    Cells(y, 3) = ComboBox6.Text
    Cells(y, 4) = TextBox2.Text
    Cells(y, 5) = TextBox3.Text
    Cells(y, 6) = ComboBox3.Text
    Cells(y, 7) = ComboBox4.Text
    Cells(y, 8) = ComboBox5.Text
    Cells(y, 9) = Application.Text(TextBox4.Text, "dd/mm/yyyy")
    Cells(y, 10) = Application.Text(TextBox5.Text, "dd/mm/yyyy")
    Cells(y, 11) = Application.Text(TextBox6.Text, "dd/mm/yyyy")
    Else
         Dim q, p As Long
        q = Application.WorksheetFunction.CountA(Sheet1.Range("A2:Z2")) - 1
        For p = 1 To q
        Me("textbox" & p).Value = Application.WorksheetFunction.VLookup(ComboBox6.Value, Sheet1.Range("A3:K20"), p + 1, 0)
        Next p
    End If
End Sub

Re: Code VBA ค้นหาข้อมูลบนฟอร์ม

Posted: Mon Jul 26, 2021 11:26 am
by snasui
:D สามารถทำย้อนกลับกับโพสต์ #2 คือนำค่าในแต่ละ Object กลับไปใส่ในเซลล์

ซึ่งต้องทราบก่อนว่า ItemNo นั้น ๆ อยู่รายการที่เท่าใด ถ้าเข้าใจโพสต์ #2 ก็นำไปปรับใช้ได้ ลองปรับมาในแนวทางนั้นดูก่อน ติดตรงไหนค่อยถามกันต่อครับ

Re: Code VBA ค้นหาข้อมูลบนฟอร์ม

Posted: Thu Jul 29, 2021 4:57 pm
by KHAMTUNM
:D ได้แค่นี้ครับอาจารย์

Code: Select all

Private Sub CommandButton1_Click()
    Dim irow As Long
    Dim ws As Worksheet
    Set ws = Worksheets("sheet1")

    If Application.CountIf(Range("c:c"), ComboBox6.Text) > 0 Then
        irow = Application.Match(ComboBox6.Text, Range("c:c"), 0)
    Else
        irow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
    End If
    ws.Cells(irow, 1).Value = Me.ComboBox1.Value
    ws.Cells(irow, 2).Value = Me.ComboBox2.Value
    ws.Cells(irow, 3).Value = Me.ComboBox6.Value
    ws.Cells(irow, 4).Value = Me.TextBox2.Value
    ws.Cells(irow, 5).Value = Me.TextBox3.Value
    ws.Cells(irow, 6).Value = Me.ComboBox3.Value
    ws.Cells(irow, 7).Value = Me.ComboBox4.Value
    ws.Cells(irow, 8).Value = Me.ComboBox5.Value
    ws.Cells(irow, 9).Value = Me.TextBox4.Value
    ws.Cells(irow, 10).Value = Me.TextBox5.Value
    ws.Cells(irow, 11).Value = Me.TextBox6.Value
    End If
End Sub

Re: Code VBA ค้นหาข้อมูลบนฟอร์ม

Posted: Thu Jul 29, 2021 4:58 pm
by KHAMTUNM
ยังทำไม่ได้ครับ

Re: Code VBA ค้นหาข้อมูลบนฟอร์ม

Posted: Thu Jul 29, 2021 8:22 pm
by snasui
:D กรุณาแนบไฟล์ล่าสุดพร้อมแนบ Code ที่ปรับปรุงแล้วมาด้วยจะได้ดูต่อไปจากนั้นครับ

Re: Code VBA ค้นหาข้อมูลบนฟอร์ม

Posted: Fri Jul 30, 2021 6:47 am
by KHAMTUNM
ที่ Userform2 ค้นหาข้อมูลจาก Item No. เพื่อแก้ไขแล้วกดคำสั่ง Update ให้ข้อมูลที่แก้ไขแล้วบันทึกลงไปในแถวเดิม ช่วยแก้ไข Code ให้ใช้งานได้ด้วยครับ

Code: Select all

Private Sub CommandButton1_Click()
    Dim irow As Long
    Dim ws As Worksheet
    Set ws = Worksheets("sheet1")

    If Application.CountIf(Range("c:c"), ComboBox6.Text) > 0 Then
        irow = Application.Match(ComboBox6.Text, Range("c:c"), 0)
    Else
        irow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
    End If
    ws.Cells(irow, 1).Value = Me.ComboBox1.Value
    ws.Cells(irow, 2).Value = Me.ComboBox2.Value
    ws.Cells(irow, 3).Value = Me.ComboBox6.Value
    ws.Cells(irow, 4).Value = Me.TextBox2.Value
    ws.Cells(irow, 5).Value = Me.TextBox3.Value
    ws.Cells(irow, 6).Value = Me.ComboBox3.Value
    ws.Cells(irow, 7).Value = Me.ComboBox4.Value
    ws.Cells(irow, 8).Value = Me.ComboBox5.Value
    ws.Cells(irow, 9).Value = Me.TextBox4.Value
    ws.Cells(irow, 10).Value = Me.TextBox5.Value
    ws.Cells(irow, 11).Value = Me.TextBox6.Value
End Sub

Re: Code VBA ค้นหาข้อมูลบนฟอร์ม

Posted: Fri Jul 30, 2021 7:40 am
by snasui
:D เพิ่ม Code ด้านล่างเข้าไปช่วยเพื่อที่จะ Add item แทนการใช้ RowSource ครับ

Code: Select all

Private Sub UserForm_Initialize()
    Dim ra As Range, r As Range
    With Worksheets("Sheet1")
        Me.ComboBox6.RowSource = ""
        Set ra = .Range("c3", .Range("c" & .Rows.Count).End(xlUp))
        For Each r In ra
            Me.ComboBox6.AddItem r.Value
        Next r
    End With
End Sub
และปรับ Code ใน Procedure Private Sub CommandButton1_Click() เฉพาะบรรทัดด้านล่างครับ

Code: Select all

'Other code
    If Application.CountIf(Range("c:c"), ComboBox6.Text) > 0 Then
        irow = Application.Match(Val(ComboBox6.Text), Range("c:c"), 0)
    Else
        irow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
    End If
'Other code

Re: Code VBA ค้นหาข้อมูลบนฟอร์ม

Posted: Fri Jul 30, 2021 5:51 pm
by KHAMTUNM
:thup: ทำได้แล้วครับ แต่เมื่อบันทึกข้อมูลลงใน Sheet1 ซึ่งผมได้ทำ conditional formatting ก็ไม่แจ้งเตือนที่เลยกำหนดฝากอุปกรณ์ (End date) และเมื่อคลิกแก้ไขเปลี่ยนค่าที่ J17 เป็น ค.ศ จึงแจ้งเตือน เป็นแบบนี้จะแก้ไขยังไงดีครับ

Re: Code VBA ค้นหาข้อมูลบนฟอร์ม

Posted: Fri Jul 30, 2021 6:40 pm
by snasui
:D ตอนนี้คอลัมน์ J เป็นวันที่แบบ Text ไม่สามารถนำไปเทียบกับ Today() ที่เป็นวันที่แบบ Number ได้ ต้องแก้ไขฟากใดฟากหนึ่งเพื่อเป็นค่าที่เทียบกันได้เสียก่อนครับ

Re: Code VBA ค้นหาข้อมูลบนฟอร์ม

Posted: Sat Jul 31, 2021 1:54 pm
by KHAMTUNM
:thup: ขอบคุณครับสำหรับคำแนะนำและช่วยแก้ไข code จนสามารถนำไปใช้งานได้
สุดท้ายกระทู้นี้ขอให้อาจารย์มีสุขภาพแข็งแรงและปลอดภัยจากโรคโควิด-19 นะครับ :D

Re: Code VBA ค้นหาข้อมูลบนฟอร์ม

Posted: Sat Jul 31, 2021 2:19 pm
by snasui
:D ยินดีที่ช่วยได้ครับ

ขอบคุณสำหรับคำอวยพร ขอให้คุณ KHAMTUNM ปลอดภัยจาก Covid-19 เช่นกันครับ