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

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

ค้นหาข้อมูลได้แล้วครับ
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

สามารถทำย้อนกลับกับโพสต์
#2 คือนำค่าในแต่ละ Object กลับไปใส่ในเซลล์
ซึ่งต้องทราบก่อนว่า ItemNo นั้น ๆ อยู่รายการที่เท่าใด ถ้าเข้าใจโพสต์ #2 ก็นำไปปรับใช้ได้ ลองปรับมาในแนวทางนั้นดูก่อน ติดตรงไหนค่อยถามกันต่อครับ
Re: Code VBA ค้นหาข้อมูลบนฟอร์ม
Posted: Thu Jul 29, 2021 4:57 pm
by KHAMTUNM

ได้แค่นี้ครับอาจารย์
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

กรุณาแนบไฟล์ล่าสุดพร้อมแนบ 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

เพิ่ม 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

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

ตอนนี้คอลัมน์ J เป็นวันที่แบบ Text ไม่สามารถนำไปเทียบกับ Today() ที่เป็นวันที่แบบ Number ได้ ต้องแก้ไขฟากใดฟากหนึ่งเพื่อเป็นค่าที่เทียบกันได้เสียก่อนครับ
Re: Code VBA ค้นหาข้อมูลบนฟอร์ม
Posted: Sat Jul 31, 2021 1:54 pm
by KHAMTUNM

ขอบคุณครับสำหรับคำแนะนำและช่วยแก้ไข code จนสามารถนำไปใช้งานได้
สุดท้ายกระทู้นี้ขอให้อาจารย์มีสุขภาพแข็งแรงและปลอดภัยจากโรคโควิด-19 นะครับ

Re: Code VBA ค้นหาข้อมูลบนฟอร์ม
Posted: Sat Jul 31, 2021 2:19 pm
by snasui

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