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

ช่วยแจ้งลำดับการทำงานพร้อมค่าทดสอบที่ต้องคีย์ในแต่ละช่องพร้อมอธิบายกำกับว่าเกิดปัญหาในขั้นตอนไหน อย่างไร จะได้เข้าถึงปัญหาโดยไวครับ
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

ที่ 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

ขอบคุณ อ. มากๆครับ
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

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

เป็นการเปลี่ยน 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
ขอบคุณครับ
ผมลองนำ code ที่ อ. เขียนให้มาเขียนเพิ่มเติมแล้ว ปรากฏว่าพบปัญหา อย่างนึงครับ
ทุกครั้งเวลาเปลี่ยน ค่า ที่ รหัสพนักงานจะเด้ง Error ไม่สามารถเปลี่ยนค่าได้ครับ แต่ช่องอื่นสามารถเปลี่ยนค่าได้ตามปกติครับ
Re: ให้ listbox แสดงข้อมูลทั้งหมดจาก sheet database ครับ
Posted: Thu Dec 01, 2022 11:23 pm
by snasui

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