Page 1 of 3

แสดงข้อมูลใน Listbox

Posted: Tue Nov 14, 2017 7:29 pm
by Benmore
ขอบสอบถามหน่อยค่ะ
ถ้าต้องการค้นหาข้อมูลด้วยวันที่ ต้องเขียนโค้ดเพิ่มเติ่มตรงไหนบ้างค่ะ
แล้วค้นหาด้วยรหัสพนักงานทำไมข้อมูลไม่ขึ้นใน Listbox ต้องแก้ไขตรงไหนค่ะ
:arrow: Userform1 :arl:

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
:D การค้นหาข้อมูลด้วยวันที่ เป็นการค้นหาร่วมกับรหัสพนักงานหรือว่าเลือกอย่างใดอย่างหนึ่ง เช่น หากคีย์วันที่ให้ค้นหาวันที่ หากคีย์รหัสพนักงานให้ค้นหาตามรหัสพนักงาน ฯลฯ

กรณีค้นหาตามรหัสพนักงานแล้วข้อมูลไม่ขึ้น ช่วยยกตัวอย่างรหัสพนักงานมาด้วยจะได้สะดวกต่อการทดสอบครับ

Re: แสดงข้อมูลใน Listbox

Posted: Wed Nov 15, 2017 7:05 am
by Benmore
snasui wrote::D การค้นหาข้อมูลด้วยวันที่ เป็นการค้นหาร่วมกับรหัสพนักงานหรือว่าเลือกอย่างใดอย่างหนึ่ง เช่น หากคีย์วันที่ให้ค้นหาวันที่ หากคีย์รหัสพนักงานให้ค้นหาตามรหัสพนักงาน ฯลฯ

กรณีค้นหาตามรหัสพนักงานแล้วข้อมูลไม่ขึ้น ช่วยยกตัวอย่างรหัสพนักงานมาด้วยจะได้สะดวกต่อการทดสอบครับ
คีย์วันที่ให้ค้นหาวันที่ หากคีย์วันที่ให้ค้นหาวันที่ คีย์รหัสพนักงานให้ค้นหาตามรหัสพนักงาน ค่ะ
เช่น วันที่ 14 september 2017 พอกดปุ้มค้นหาก็จะแสดงข้อมูลทั้งหมดที่ถูกบันทึกลงในชีทการเบิกที่เป็นวันที่ 14 september 2017 เช่นเดียวกับรหัสพนักงานค่ะ

Re: แสดงข้อมูลใน Listbox

Posted: Thu Nov 16, 2017 5:15 am
by snasui
:D ลักษณะที่แจ้งมานั้นเป็นการค้นหาตามเงื่อนไขเดียว หากเป็นการค้นหาจาก 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
:D ไม่ทราบว่าได้กำหนดค่าอะไรให้กับ 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
:D หลักการกำหนดค่าให้กับ 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
:D กรุณาแจังปัญหาพร้อมไฟล์แนบที่มี Code ล่าสุดเรียบร้อยแล้วพร้อมกับข้อมูลที่จะทดสอบเสมอ จะได้สะดวกกับผู้ตอบที่จะทดสอบได้ทันทีครับ

Re: แสดงข้อมูลใน Listbox

Posted: Thu Nov 16, 2017 11:08 am
by Benmore
snasui wrote::D กรุณาแจังปัญหาพร้อมไฟล์แนบที่มี Code ล่าสุดเรียบร้อยแล้วพร้อมกับข้อมูลที่จะทดสอบเสมอ จะได้สะดวกกับผู้ตอบที่จะทดสอบได้ทันทีครับ
:arrow: ค้นหาข้อมูลด้วยวันเดือนปีไม่ได้ค่ะ
:arrow: ค้าหาข้อมูลด้วยรหัสแล้วข้อมูลไม่แสดงใน listbox ค่ะ

Re: แสดงข้อมูลใน Listbox

Posted: Thu Nov 16, 2017 11:11 am
by snasui
:D วันที่เท่าไร เดือนใด ปีใดครับ รหัสใดครับ แจ้งมาให้ชัด ๆ ครับ

ถ้าเอาเงื่อนไขการตรวจสอบวันที่โปรแกรมทำงานถูกต้องหรือไม่ แจ้งมาด้วยครับ

Re: แสดงข้อมูลใน Listbox

Posted: Thu Nov 16, 2017 11:17 am
by Benmore
snasui wrote::D วันที่เท่าไร เดือนใด ปีใดครับ รหัสใดครับ แจ้งมาให้ชัด ๆ ครับ

ถ้าเอาเงื่อนไขการตรวจสอบวันที่โปรแกรมทำงานถูกต้องหรือไม่ แจ้งมาด้วยครับ
ตัวอย่างค่ะ :arrow: ถ้าเลือกวันที่ 16 November 2017 แล้วกดปุ่มค้นหาให้ข้อมูลในชีทการเบิกที่มีข้อมูลตรงกับวันที่ ที่เราต้องการ แสดงข้อมูลทั้งหมดที่มีวันที่ตรงกันใน listbox ค่ะ
:arrow: เมื่อค้นหาด้วยรหัส 0222222 แล้วกดปุ่มค้นหาให้ข้อมูลในชีทการเบิกที่มีข้อมูลตรงกับรหัส 0222222 ที่เราต้องการ แสดงข้อมูลทั้งหมดที่มีรหัสตรงกันใน listbox ค่ะ

Re: แสดงข้อมูลใน Listbox

Posted: Thu Nov 16, 2017 12:13 pm
by snasui
:D ตัวอย่างการปรับ 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::D ตัวอย่างการปรับ 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
:D ในเครื่องผมสามารถให้คำตอบได้ครับ

กรุณาแจ้งข้อมูลทดสอบมาด้วยเสมอ ผมจะได้ทดสอบตามนั้น Control ใดคีย์ค่าใด เลือกค่าใด จำเป็นต้องแจ้งมาให้ชัดเจนครับ

Re: แสดงข้อมูลใน Listbox

Posted: Thu Nov 16, 2017 2:30 pm
by Benmore
ภาพแสดงการรันโปรแกรมค่ะ ไม่มีข้อมูลจากชีทการเบิกมาแสดงใน listbox เลยคะ
ค้นหาด้วยวันที่ :ard:
1222.png
ค้นหาด้วยรหัส :ard:
3333.png

Re: แสดงข้อมูลใน Listbox

Posted: Thu Nov 16, 2017 2:39 pm
by snasui
:D ไฟล์ที่แนบมาไม่มีวันที่นั้นในชีต EGAS_Data คอลัมน์ E ที่นำไปใช้ค้นหาครับ

Re: แสดงข้อมูลใน Listbox

Posted: Thu Nov 16, 2017 2:58 pm
by Benmore
:ard: :ard: :ard: :ard: :ard: :ard: :ard:

Re: แสดงข้อมูลใน Listbox

Posted: Thu Nov 16, 2017 5:11 pm
by snasui
:D ภาพทีจับมาล่าสุดไม่เกี่ยวกับ Code ครับ

Code ที่กำลังถามตอบกันอยู่นี้ เป็นการค้นหาวันที่จาก Sheet6 หมายถึง EGAS_Data (ดูโพสต์ #9 ประกอบ) กรุณาทบทวนดูใหม่ครับ