Page 1 of 3
แสดงข้อมูลใน Listbox
Posted: Tue Nov 14, 2017 7:29 pm
by Benmore
ขอบสอบถามหน่อยค่ะ
ถ้าต้องการค้นหาข้อมูลด้วยวันที่ ต้องเขียนโค้ดเพิ่มเติ่มตรงไหนบ้างค่ะ
แล้วค้นหาด้วยรหัสพนักงานทำไมข้อมูลไม่ขึ้นใน Listbox ต้องแก้ไขตรงไหนค่ะ
Userform1
Code: Select all
'ค้นหา
Private Sub btsearch1_Click()
Dim found As Boolean
Dim txt As String
Dim r As Range
On Error Resume Next
Dim nRow As String
For Each r In Sheet6.Columns(1).SpecialCells(xlCellTypeConstants)
Sheet6.Activate
If Right(r.Value, 3) = Right(txtsearch1.Text, 3) Then
nRow = r.row
found = True
Exit For
End If
Next r
If found Then
If Not IsNumeric(VBA.Right(txtsearch1.Text, 3)) Then
MsgBox "กรุณากรอกข้อมูลเป็นตัวเลข"
Exit Sub
End If
If Err.Number = 91 Then
ListBox1.RowSource = "txtsearch1.Text"
TextBox7.Value = ""
TextBox8.Value = ""
TextBox9.Value = ""
TextBox10.Value = ""
MsgBox "ไม่มีข้อมูล"
End If
TextBox7.Value = Cells(nRow, 1)
TextBox8.Value = Cells(nRow, 8)
TextBox9.Value = Cells(nRow, 2)
TextBox10.Value = Cells(nRow, 13)
txt = "Emp_ID : " & Cells(nRow, 1) & vbCrLf & _
"Name : " & Cells(nRow, 2) & vbCrLf & _
"Section : " & Cells(nRow, 3) & vbCrLf & _
"Uniform_No : " & Cells(nRow, 4) & vbCrLf & _
"Date : " & Cells(nRow, 5) & vbCrLf & _
"Discription : " & Cells(nRow, 6) & vbCrLf & _
"Reason : " & Cells(nRow, 7)
ListBox1.Value = txt
Exit Sub
End If
Sheet1.Activate
End Sub
Re: แสดงข้อมูลใน Listbox
Posted: Wed Nov 15, 2017 6:29 am
by snasui
การค้นหาข้อมูลด้วยวันที่ เป็นการค้นหาร่วมกับรหัสพนักงานหรือว่าเลือกอย่างใดอย่างหนึ่ง เช่น หากคีย์วันที่ให้ค้นหาวันที่ หากคีย์รหัสพนักงานให้ค้นหาตามรหัสพนักงาน ฯลฯ
กรณีค้นหาตามรหัสพนักงานแล้วข้อมูลไม่ขึ้น ช่วยยกตัวอย่างรหัสพนักงานมาด้วยจะได้สะดวกต่อการทดสอบครับ
Re: แสดงข้อมูลใน Listbox
Posted: Wed Nov 15, 2017 7:05 am
by Benmore
snasui wrote: การค้นหาข้อมูลด้วยวันที่ เป็นการค้นหาร่วมกับรหัสพนักงานหรือว่าเลือกอย่างใดอย่างหนึ่ง เช่น หากคีย์วันที่ให้ค้นหาวันที่ หากคีย์รหัสพนักงานให้ค้นหาตามรหัสพนักงาน ฯลฯ
กรณีค้นหาตามรหัสพนักงานแล้วข้อมูลไม่ขึ้น ช่วยยกตัวอย่างรหัสพนักงานมาด้วยจะได้สะดวกต่อการทดสอบครับ
คีย์วันที่ให้ค้นหาวันที่ หากคีย์วันที่ให้ค้นหาวันที่ คีย์รหัสพนักงานให้ค้นหาตามรหัสพนักงาน ค่ะ
เช่น วันที่ 14 september 2017 พอกดปุ้มค้นหาก็จะแสดงข้อมูลทั้งหมดที่ถูกบันทึกลงในชีทการเบิกที่เป็นวันที่ 14 september 2017 เช่นเดียวกับรหัสพนักงานค่ะ
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 5:15 am
by snasui
ลักษณะที่แจ้งมานั้นเป็นการค้นหาตามเงื่อนไขเดียว หากเป็นการค้นหาจาก Procedure เดิมคือ
btsearch1_Click
ให้สร้างตัวแปรวันที่สำหรับเปรียบเทียบกับค่าในคอลัมน์ E ของชีต EGAS_Data สมมุตชื่อว่า chkDate
ตัวอย่าง Code ในส่วนที่ใช้ Search แล้วเก็บค่าบรรทัดจะกลายเป็น
Code: Select all
If Right(r.Value, 3) = Right(txtsearch1.Text, 3) Or r.Offset(0, 4).Value = chkDate Then
nRow = r.Row
found = True
Exit For
End If
ลองกำหนดตัวแปร chkDate มาด้วยตัวเองก่อน ติดแล้วค่อยถามกันต่อครับ
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 8:30 am
by Benmore
Code: Select all
ค้นหา1
Private Sub btsearch1_Click()
Dim found As Boolean
Dim txt As String
Dim r As Range
Dim chkDate As Date
On Error Resume Next
Dim nRow As String
For Each r In Sheet6.Columns(1).SpecialCells(xlCellTypeConstants)
Sheet6.Activate
If Right(r.Value, 3) = Right(txtsearch1.Text, 3) Or r.Offset(0, 4).Value = chkDate Then
nRow = r.row
found = True
Exit For
End If
Next r
If found Then
If Not IsNumeric(VBA.Right(txtsearch1.Text, 3)) Then
MsgBox "กรุณาใส่ข้อมูลเป็นตัวเลข"
Exit Sub
End If
If Err.Number = 91 Then
'TextBox1.RowSource = "txtsearch1.Text"
TextBox7.Value = ""
TextBox8.Value = ""
TextBox9.Value = ""
TextBox10.Value = ""
'MsgBox "ไม่มีข้อมูล"
End If
TextBox7.Value = Cells(nRow, 1)
TextBox8.Value = Cells(nRow, 8)
TextBox9.Value = Cells(nRow, 2)
TextBox10.Value = Cells(nRow, 13)
txt = "Emp_ID : " & Cells(nRow, 1) & vbCrLf & _
"Name : " & Cells(nRow, 2) & vbCrLf & _
"Section : " & Cells(nRow, 3) & vbCrLf & _
"Uniform_No : " & Cells(nRow, 4) & vbCrLf & _
"Date : " & Cells(nRow, 5) & vbCrLf & _
"Discription : " & Cells(nRow, 6) & vbCrLf & _
"Reason : " & Cells(nRow, 7)
ListBox1.Value = txt
Exit Sub
Else
MsgBox "ไม่มีข้อมูล"
End If
Sheet1.Activate
End Sub
ลองปรับโค้ดดูแล้วก็ยังไม่แสดงข้อมูลใน listBox เลยค่ะ
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 8:59 am
by snasui
ไม่ทราบว่าได้กำหนดค่าอะไรให้กับ
chkDate
กำหนดไว้ที่บรรทัดไหนครับ
ประกาศตัวแปรแล้วต้องกำหนดค่าให้กับ
chkDate
เสียก่อนแล้วค่อยนำไปใช้ครับ
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 9:48 am
by Benmore
Code: Select all
Dim chkDate As Date
On Error Resume Next
Dim nRow As String
For Each r In Sheet6.Columns(1).SpecialCells(xlCellTypeConstants)
Sheet6.Activate
chkDate = cmday Or cmmonth Or cmyear
If Right(r.Value, 3) = Right(txtsearch1.Text, 3) Or r.Offset(0, 4).Value = chkDate Then
nRow = r.row
found = True
Exit For
End If
Next r
ตัวอย่างโค้ดค่ะ
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 10:01 am
by snasui
หลักการกำหนดค่าให้กับ chkDate จะต้องดูว่าต้องใข้ค่านั้นไปเทียบกับค่าในคอลัมน์ E ของ Worksheet ซึ่งประกอบด้วย วัน เดือน ปี
ดังนั้น chkDate จะต้องเป็นวันที่แบบ วัน เดือน ปี ไม่ใช่ วัน หรือ เดือน หรือ ปี เพียงอย่างใดอย่างหนึ่ง ยกเว้นต้องการค้นหาแบบ วัน หรือ เดือน หรือ ปี แยกกัน
การกำนดตัวแปรให้กับวัน เดือน ปี ไม่ใช่เรื่องง่ายนัก ยิ่งถ้ากำหนดเดือนเป็นข้อความแทนเป็นตัวเลขจะมีความซับซ้อนเพิ่มขึ้น
ตัวอย่างการกำหนดค่าให้กับตัวแปร chkDate ตามด้านล่างครับครับ
chkDate=Cdate(Applicion.Text(cmday & "/" & cmmonth & "/" & cmyear,"ddmmyyyy"))
จากนั้นค่อยนำ chkDate ไปใช้งานต่อไป
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 10:53 am
by Benmore
Code: Select all
Private Sub btsearch1_Click()
Dim found As Boolean
Dim txt As String
Dim r As Range
Dim chkDate As Date
On Error Resume Next
Dim nRow As String
For Each r In Sheet6.Columns(1).SpecialCells(xlCellTypeConstants)
Sheet6.Activate
chkDate = CDate(Applicion.Text(cmday & "/" & cmmonth & "/" & cmyear, "ddmmyyyy"))
If Right(r.Value, 3) = Right(txtsearch1.Text, 3) Or r.Offset(0, 4).Value = chkDate Then
nRow = r.row
found = True
Exit For
End If
Next r
If found Then
If Not IsNumeric(VBA.Right(txtsearch1.Text, 3)) Then
MsgBox "กรุณาใส่ข้อมูลเป็นตัวเลข"
Exit Sub
End If
If Err.Number = 91 Then
TextBox1.RowSource = "txtsearch1.Text"
TextBox7.Value = ""
TextBox8.Value = ""
TextBox9.Value = ""
TextBox10.Value = ""
End If
แก้ไขได้ประมาณนี้ค่ะ แต่ก็ยังรันไม่ได้ค่ะ ข้อมูลที่ค้นหาด้วยรหัสก็ไม่แสดงใน listbox เลยค่ะ
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 11:04 am
by snasui
กรุณาแจังปัญหาพร้อมไฟล์แนบที่มี Code ล่าสุดเรียบร้อยแล้วพร้อมกับข้อมูลที่จะทดสอบเสมอ จะได้สะดวกกับผู้ตอบที่จะทดสอบได้ทันทีครับ
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 11:08 am
by Benmore
snasui wrote: กรุณาแจังปัญหาพร้อมไฟล์แนบที่มี Code ล่าสุดเรียบร้อยแล้วพร้อมกับข้อมูลที่จะทดสอบเสมอ จะได้สะดวกกับผู้ตอบที่จะทดสอบได้ทันทีครับ
ค้นหาข้อมูลด้วยวันเดือนปีไม่ได้ค่ะ
ค้าหาข้อมูลด้วยรหัสแล้วข้อมูลไม่แสดงใน listbox ค่ะ
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 11:11 am
by snasui
วันที่เท่าไร เดือนใด ปีใดครับ รหัสใดครับ แจ้งมาให้ชัด ๆ ครับ
ถ้าเอาเงื่อนไขการตรวจสอบวันที่โปรแกรมทำงานถูกต้องหรือไม่ แจ้งมาด้วยครับ
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 11:17 am
by Benmore
snasui wrote: วันที่เท่าไร เดือนใด ปีใดครับ รหัสใดครับ แจ้งมาให้ชัด ๆ ครับ
ถ้าเอาเงื่อนไขการตรวจสอบวันที่โปรแกรมทำงานถูกต้องหรือไม่ แจ้งมาด้วยครับ
ตัวอย่างค่ะ
ถ้าเลือกวันที่ 16 November 2017 แล้วกดปุ่มค้นหาให้ข้อมูลในชีทการเบิกที่มีข้อมูลตรงกับวันที่ ที่เราต้องการ แสดงข้อมูลทั้งหมดที่มีวันที่ตรงกันใน listbox ค่ะ
เมื่อค้นหาด้วยรหัส 0222222 แล้วกดปุ่มค้นหาให้ข้อมูลในชีทการเบิกที่มีข้อมูลตรงกับรหัส 0222222 ที่เราต้องการ แสดงข้อมูลทั้งหมดที่มีรหัสตรงกันใน listbox ค่ะ
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 12:13 pm
by snasui
ตัวอย่างการปรับ Code ครับ
Code: Select all
Dim chkDate As Date
On Error Resume Next
Dim nRow As String
chkDate = DateSerial(cmyear, cmmonth.ListIndex + 1, cmday)
Sheet6.Activate
For Each r In Sheet6.Columns(1).SpecialCells(xlCellTypeConstants)
If Right(r.Value, 3) = Right(txtsearch1.Text, 3) Or r.Offset(0, 4).Value2 = CLng(chkDate) Then
nRow = r.Row
found = True
Exit For
End If
กรุณาทดสอบด้วยวันที่ทีมีอยู่จริงในชีต EGAS_Data ไม่ใช่วันที่ 16/11/2017 ยกเว้นจะมีวันที่นี้อยู่ด้วยครับ
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 12:36 pm
by Benmore
snasui wrote: ตัวอย่างการปรับ Code ครับ
Code: Select all
Dim chkDate As Date
On Error Resume Next
Dim nRow As String
chkDate = DateSerial(cmyear, cmmonth.ListIndex + 1, cmday)
Sheet6.Activate
For Each r In Sheet6.Columns(1).SpecialCells(xlCellTypeConstants)
If Right(r.Value, 3) = Right(txtsearch1.Text, 3) Or r.Offset(0, 4).Value2 = CLng(chkDate) Then
nRow = r.Row
found = True
Exit For
End If
กรุณาทดสอบด้วยวันที่ทีมีอยู่จริงในชีต EGAS_Data ไม่ใช่วันที่ 16/11/2017 ยกเว้นจะมีวันที่นี้อยู่ด้วยครับ
ปรับตามแล้วก็ยังไม่แสดงอะไรแม้กระทั่งค้นหาด้วยรหัสค่ะ
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 2:02 pm
by snasui
ในเครื่องผมสามารถให้คำตอบได้ครับ
กรุณาแจ้งข้อมูลทดสอบมาด้วยเสมอ ผมจะได้ทดสอบตามนั้น Control ใดคีย์ค่าใด เลือกค่าใด จำเป็นต้องแจ้งมาให้ชัดเจนครับ
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 2:30 pm
by Benmore
ภาพแสดงการรันโปรแกรมค่ะ ไม่มีข้อมูลจากชีทการเบิกมาแสดงใน listbox เลยคะ
ค้นหาด้วยวันที่
1222.png
ค้นหาด้วยรหัส
3333.png
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 2:39 pm
by snasui
ไฟล์ที่แนบมาไม่มีวันที่นั้นในชีต EGAS_Data คอลัมน์ E ที่นำไปใช้ค้นหาครับ
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 2:58 pm
by Benmore
Re: แสดงข้อมูลใน Listbox
Posted: Thu Nov 16, 2017 5:11 pm
by snasui
ภาพทีจับมาล่าสุดไม่เกี่ยวกับ Code ครับ
Code ที่กำลังถามตอบกันอยู่นี้ เป็นการค้นหาวันที่จาก Sheet6 หมายถึง EGAS_Data (ดูโพสต์ #9 ประกอบ) กรุณาทบทวนดูใหม่ครับ