Page 1 of 1

ให้ listbox แสดงข้อมูลทั้งหมดจาก sheet database ครับ

Posted: Sat Nov 26, 2022 4:05 pm
by Xcelvba
ต้องการให้ listbox แสดงข้อมูลจาก sheet database + เมื่อบันทึกข้อมูล ครับ
Username : hr
Password : 123456789

Code: Select all

Private Sub CommandButton1_Click()
    Dim msg As String
    
    If NoTxt.Value = "" Then
        MsgBox "¡ÃسҡÃÍ¡ÃËÑʾ¹Ñ¡§Ò¹", vbCritical, "Save failed"
        BookTxt.Value = ""
        Exit Sub
    End If
        
    If BookTxt.Value = "" Then
        MsgBox "¡ÃسҡÃÍ¡Çѹ·Õè¨Í§Ëéͧ¾Ñ¡", vbCritical, "Save failed"
        NoTxt.Value = ""
        Exit Sub
    End If
           
            msg = MsgBox("µéͧ¡Òúѹ·Ö¡¢éÍÁÙÅãªèäËÁ", vbYesNo + vbInformation, "Successful !!!")
            If msg = vbYes Then
                Call Submitform2
                NoTxt.Value = ""
                BookTxt.Value = ""
                MsgBox "ºÑ¹·Ö¡¢éÍÁÙÅÊÓàÃç¨", vbOKOnly + vbInformation, "Save !!"
                Else: Exit Sub
            End If
End Sub

Code: Select all

Sub Submitform2()
    Dim sh As Worksheet
    Dim iRow As Long
    
    
    Set sh = ThisWorkbook.Sheets("Database")
    
    iRow = [Counta(Database!A:A)] + 1
    
    With sh
        .Cells(iRow, 1) = iRow - 1
        .Cells(iRow, 3) = UserForm2.NoTxt.Value
        .Cells(iRow, 2) = UserForm2.BookTxt.Value
        .Cells(iRow, 10) = [Text(now(),"DD-MM-YYYY HH:MM:SS")]
    End With
    
End Sub

Re: ให้ listbox แสดงข้อมูลทั้งหมดจาก sheet database ครับ

Posted: Sat Nov 26, 2022 5:58 pm
by snasui
:D ช่วยแจ้งลำดับการทำงานพร้อมค่าทดสอบที่ต้องคีย์ในแต่ละช่องพร้อมอธิบายกำกับว่าเกิดปัญหาในขั้นตอนไหน อย่างไร จะได้เข้าถึงปัญหาโดยไวครับ

Re: ให้ listbox แสดงข้อมูลทั้งหมดจาก sheet database ครับ

Posted: Mon Nov 28, 2022 8:36 am
by Xcelvba
ในรูปที่ 1 Database ณ ตอนนี้ มีข้อมูลอยู่ 1 แถว
1.เวลาเปิดเข้า ฟอร์ม ให้ โชว์ข้อมูลใน ชีท Database พร้อมหัวตาราง ในฟอร์ม (listbox) ตามด้านล่างครับ

ลำดับ วันที่จอง รหัส ชื่อ นามสกุล แผนก Time Stamp
1 26/11/2022 111111 จะใช้สูตร index+match ใน Column (D,E,F) 26-11-2022 16:03:00

2.เมื่อ กรอกข้อมูล+กดบันทึก ในฟอร์ม (รูป 2) ให้โชว์ข้อมูลทันที ใน listbox (ซึ่งตอนนี้ข้อมูลในชีท Database จะถูกบันทึกแล้วแต่ใน listbox ไม่โชว์ครับ)

Re: ให้ listbox แสดงข้อมูลทั้งหมดจาก sheet database ครับ

Posted: Mon Nov 28, 2022 9:22 am
by Xcelvba
เบื้องต้นผมได้ลองทำดูแล้ว
1.พอกดบันทึกข้อมูลโชว์ที่ listbox รูปที่ 1 ตามต้องการครับ

แต่ปัญหาที่พบคือ เมื่อ รันหรือเข้าฟอร์มใหม่ ค่าเก่าไม่มาแสดงครับ
รูป 2

ต้องการเมื่อเปิดฟอร์มขึ้นมาใหม่ ค่าใน ชีท แสดงใน listbox เลย โดยที่ยังไม่กดบันทึก หรือ กดบันทึกข้อมูล ครับ

Code: Select all

Sub Submitform2()
    Dim sh As Worksheet
    Dim iRow As Long
    
    
    Set sh = ThisWorkbook.Sheets("Database")
    
    iRow = [Counta(Database!A:A)] + 1
    
    With sh
        .Cells(iRow, 1) = iRow - 1
        .Cells(iRow, 3) = Record_Form.NoTxt.Value
        .Cells(iRow, 2) = Record_Form.BookTxt.Value
        .Cells(iRow, 10) = [Text(now(),"DD-MM-YYYY HH:MM:SS")]
    End With

    With Record_Form
        .ListDatabase.ColumnCount = 10
        .ListDatabase.ColumnHeads = True
        .ListDatabase.ColumnWidths = "30,60,75,40,60,45,55,70,70,45"
        If iRow > 1 Then
        
            .ListDatabase.RowSource = "Database!A2:I" & iRow
        Else
            .ListDatabase.RowSource = "Database!A2:I2"
            End If
            
    End With
End Sub

Re: ให้ listbox แสดงข้อมูลทั้งหมดจาก sheet database ครับ

Posted: Mon Nov 28, 2022 7:40 pm
by snasui
:D ที่ Record_Form เพิ่ม Code ตามด้านล่างครับ

Code: Select all

Private Sub UserForm_Initialize()
    Dim iRow As Long
    
    iRow = [Counta(Database!A:A)] + 1
    
    With Record_Form
        .ListDatabase.ColumnCount = 10
        .ListDatabase.ColumnHeads = True
        .ListDatabase.ColumnWidths = "30,60,75,40,60,45,55,70,70,45"
        If iRow > 1 Then
            .ListDatabase.RowSource = "Database!A2:I" & iRow
        Else
            .ListDatabase.RowSource = "Database!A2:I2"
        End If
            
    End With
End Sub

Re: ให้ listbox แสดงข้อมูลทั้งหมดจาก sheet database ครับ

Posted: Tue Nov 29, 2022 11:10 am
by Xcelvba
:thup: ขอบคุณ อ. มากๆครับ

Re: ให้ listbox แสดงข้อมูลทั้งหมดจาก sheet database ครับ

Posted: Tue Nov 29, 2022 1:40 pm
by Xcelvba
สอบถามต่อจากโพสนี้ครับ

ผมต้องการเปลี่ยนแปลงข้อมูลจาก listbox แล้วไปบันทึกใน Sheet "Database" ครับ
1. Username : hr Pass : 123456789
2. ดูรายชื่อผู้จอง
3. ตรง listbox กด Double คลิก แล้วจะมี ฟอร์ม แสดงดังรูปที่ 1 ครับ เมื่อเปลี่ยนค่าแล้วกดปุ่ม "เปลี่ยนแปลง" ให้นำค่าที่เปลี่ยนแปลงไป save แทนใน sheet "Database" ใน list นั้นๆ ครับ

ลองทำดูแล้ว Error บันทึกนี้ครับ
Namelist_Form.ListBox1.Column(0) = Me.TextBox1.Text

Code: Select all

Private Sub CommandButton1_Click()

    Dim Msg As String
    Msg = MsgBox("¤Ø³µéͧ¡ÒÃà»ÅÕè¹á»Å§¢éÍÁÙÅãªèäËÁ?!", vbYesNo + vbExclamation, "Editing")
    
        If Msg = vbYes Then
            Namelist_Form.ListBox1.Column(0) = Me.TextBox1.Text
            End If
    
End Sub

Re: ให้ listbox แสดงข้อมูลทั้งหมดจาก sheet database ครับ

Posted: Tue Nov 29, 2022 8:03 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Private Sub CommandButton1_Click()

    Dim Msg As String, l As Long
       
    Msg = MsgBox("คุณต้องการเปลี่ยนแปลงข้อมูลใช่ไหม?!", vbYesNo + vbExclamation, "Editing")
    
    If Msg = vbYes Then
        With Worksheets("Database")
            l = Application.Match(CLng(Me.TextBox2.Value), .Range("c1", .Range("c" & .Rows.Count).End(xlUp)), 0)

'        Namelist_Form.ListBox1.Column(0) = Me.TextBox1.Text
            .Cells(l, "a").Value = Me.TextBox1.Value
            .Cells(l, "b").Value = Me.TextBox2.Value
            'Other code
        End With
    End If
    
End Sub
งานนี้เป็นการเขียนค่าเข้าไปใน ListBox โดยนำมาจาก Property ที่ชื่อว่า RowSource ซึ่งต้นทางคือช่วงเซลล์ หากจะเปลียนค่าต้องเปลี่ยนในเซลล์ต้นทาง ไม่ใช่เปลี่ยนตรง ๆ เข้าไปใน ListBox ครับ

Re: ให้ listbox แสดงข้อมูลทั้งหมดจาก sheet database ครับ

Posted: Thu Dec 01, 2022 8:23 am
by Xcelvba
ขอบคุณครับ สอบถามเพิ่มเติมครับบรรทัดนี้

Code: Select all

Application.Match(CLng(Me.TextBox2.Value), .Range("c1", .Range("c" & .Rows.Count).End(xlUp)), 0)
CLng มีความหมายว่าอย่างไรครับ

Re: ให้ listbox แสดงข้อมูลทั้งหมดจาก sheet database ครับ

Posted: Thu Dec 01, 2022 8:40 am
by snasui
:D เป็นการเปลี่ยน Data Type เพื่อให้ Match กันได้ ดูที่นี่เพิ่มเติมครับ https://learn.microsoft.com/en-us/offic ... -functions

Re: ให้ listbox แสดงข้อมูลทั้งหมดจาก sheet database ครับ

Posted: Thu Dec 01, 2022 8:56 am
by Xcelvba
snasui wrote: Thu Dec 01, 2022 8:40 am :D เป็นการเปลี่ยน Data Type เพื่อให้ Match กันได้ ดูที่นี่เพิ่มเติมครับ https://learn.microsoft.com/en-us/offic ... -functions
ขอบคุณครับ
ผมลองนำ code ที่ อ. เขียนให้มาเขียนเพิ่มเติมแล้ว ปรากฏว่าพบปัญหา อย่างนึงครับ
ทุกครั้งเวลาเปลี่ยน ค่า ที่ รหัสพนักงานจะเด้ง Error ไม่สามารถเปลี่ยนค่าได้ครับ แต่ช่องอื่นสามารถเปลี่ยนค่าได้ตามปกติครับ

Re: ให้ listbox แสดงข้อมูลทั้งหมดจาก sheet database ครับ

Posted: Thu Dec 01, 2022 11:23 pm
by snasui
:D รหัสพนักงานคือค่าทีใช้อ้างอิงเพื่อนำไปค้นหาว่ารหัสพนักงานปัจจุบันที่ต้องการเปลี่ยนอยู่ในบรรทัดที่เท่าไร ถ้าเปลี่ยนไปเป็นรหัสที่ไม่เคยมีก็จะ Error ถือเป็นเรื่องปกติครับ

หากไม่ต้องการให้ใช้รหัสพนักงานในการอ้างอิงก็ต้องระบุมาใหม่ว่าใช้ค่าไหนในการอ้างอิง หรือจะใช้ลำดับที่ของบรรทัดใน ListBox ก็สามารถทำได้ แต่จะต้องเขียนมาเองก่อน ติดตรงไหนค่อยถามกันต่อครับ

Re: ให้ listbox แสดงข้อมูลทั้งหมดจาก sheet database ครับ

Posted: Fri Dec 02, 2022 8:18 am
by Xcelvba
ขอบคุณครับ อยากจะใช้ลำดับของ listbox เป็นตัวกำหนดครับ จะลองศึกษาเขียนเองมาก่อนครับ ถ้าติดตรงไหนจะมาถามต่อครับ