Page 1 of 1
เป็นCode สำหรับใช้บันทึกข้อมูล
Posted: Mon Jun 23, 2014 2:12 pm
by pongpang
เป็นCode สำหรับใช้บันทึกข้อมูล
Code: Select all
Private Sub CommandButton1_Click()
Dim rAll As Range, r As Range
With Sheets("sheet1")
Set rAll = .Range("b3", .Range("b" & Rows.Count).End(xlUp))
For Each r In rAll
If CStr(r) = ComboBox1.Text Then
r.Offset(0, 1) = TextBox1.Text
r.Offset(0, 2) = TextBox2.Text
r.Offset(0, 3) = TextBox3.Text
r.Offset(0, 4) = TextBox4.Text
Exit For
End If
Next r
End With
End Sub
ผลที่ได้รับ
จุดเด่น ถ้าต้องปรับปรุงข้อมูลเก่าสามารถปรับปรุงลงในตำแหน่งเดิมได้
จุดอ่อนที่ต้องปรับปรุง
การบันทึกช้อมูลใหม่(เพิ่มข้อมูล) ถ้าไม่พิมพ์เลขที่สมาชิกลงในตารางไว้ล่วงหน้า
ไม่สามารถคลิกเพิ่มข้อมูลได้
ความต้องการ1 ไม่ต้องพิมพ์เลขที่สมาชิกในตารางไว้ล่วงหน้าก็ให้สามารถบันทึกข้อมูลได้
ขอความกรุณา แก้ไขปรับปรุงให้ด้วยครับ
ความต้องการ2 กำหนดให้TEXTBOX แสดงค่าเป็นรูปแบบ d/mm/yy
Re: เป็นCode สำหรับใช้บันทึกข้อมูล
Posted: Mon Jun 23, 2014 2:56 pm
by snasui

Code ที่แนบมาเป็นการแก้ไขข้อมูลเก่าเท่านั้น
ทุกจุดอ่อนที่ถามให้พยายามเขียนแก้มาเองก่อนและต้องเป็นเช่นนี้ทุกครั้ง ติดแล้วค่อยถามกันต่อครับ
Re: เป็นCode สำหรับใช้บันทึกข้อมูล
Posted: Mon Jun 23, 2014 10:04 pm
by pongpang
เรียน อาจารย์ คนควน
ได้พยายามแล้วครับ แต่เมื่อแก้ไขข้อมูลเก่าหรือเพิ่มข้อมูลจะเกิด ดีบัก ตามภาพครับ
AXY1.png
AXY.png
Code: Select all
Private Sub CommandButton1_Click()
Dim rAll As Range, r As Range
Set ws = Worksheets("sheet1")
With ws
Set rAll = .Range("b3", .Range("b" & Rows.Count).End(xlUp))
For Each r In rAll
If CStr(r) = ComboBox1.Text Then
r.Offset(0, 1) = TextBox1.Text
r.Offset(0, 2) = TextBox2.Text
r.Offset(0, 3) = TextBox3.Text
r.Offset(0, 4) = TextBox4.Text
ComboBox1.Text = ""
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
ElseIf CStr(r) <> ComboBox1.Text Then
Irow = Sheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row + 1
ws.Cells(Rows, 1).Value = ComboBox1.Text
ws.Cells(Rows, 2).Value = TextBox1.Text
ws.Cells(Rows, 3).Value = TextBox2.Text
ws.Cells(Rows, 4).Value = TextBox3.Text
ws.Cells(Rows, 5).Value = TextBox4.Text
ComboBox1.Text = ""
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
Exit For
End If
Next r
End With
End Sub
Re: เป็นCode สำหรับใช้บันทึกข้อมูล
Posted: Mon Jun 23, 2014 10:24 pm
by snasui

จาก
ws.Cells(Rows, 1).Value = ComboBox1.Text ควรเป็น
ws.Cells(Irow, 1).Value = ComboBox1.Text รวมทั้งตัวอื่น ๆ ก็เช่นเดียวกัน
่ส่วน
IRow ควรจะมีค่าเท่ากับบรรทัดหลังบรรทัดที่มีข้อมูลคือ
Irow = Sheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
Re: เป็นCode สำหรับใช้บันทึกข้อมูล
Posted: Mon Jun 23, 2014 11:19 pm
by pongpang
เรียน อาจารย์
ผมได้ปรับปรุง Code บางส่วน จนสามารถลงในคอลัมน์ได้ตามต้อง แต่มีบางส่วน ยังคงมีความต้องการและปัญหา ดังนี้
ความต้องการ เมื่อแก้ไขข้อมูลเก่าให้นำข้อมูลวางที่ Row เดิม
ถ้าเพิ่มข้อมูล นำข้อมูลต่อที่Rowล่าง
ผลของ Code
ถ้าแก้ไขเช่น แก้ไข นามสกุลของเลขที่ 1,3,4 จะไม่วางข้อมูลทับของเลขที่เดิม จะนำข้อมูลไปต่อข้างล่าง และไม่แก้ไขตามที่คีย์
1.จากCode ข้างล่างต้องแก้ไขที่ส่วนใด
2.การกำหนดให้ Text แสดงข้อมูลวันเดือนปี เป็นวันเดือนปี
ต้องดำเนินการอย่างไร ครับ
Code: Select all
Private Sub CommandButton1_Click()
Dim rAll As Range, r As Range
Set ws = Worksheets("sheet1")
With ws
Set rAll = .Range("b3", .Range("b" & Rows.Count).End(xlUp))
For Each r In rAll
If CStr(r) = ComboBox1.Text Then
r.Offset(0, 1) = TextBox1.Text
r.Offset(0, 2) = TextBox2.Text
r.Offset(0, 3) = TextBox3.Text
r.Offset(0, 4) = TextBox4.Text
ComboBox1.Text = ""
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
ElseIf CStr(r) <> ComboBox1.Text Then
'Irow = Sheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row + 1
Irow = Sheets("sheet1").Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row
'ws.Cells(Rows, 1).Value = ComboBox1.Text
ws.Cells(Irow, 2).Value = ComboBox1.Text
ws.Cells(Irow, 3).Value = TextBox1.Text
ws.Cells(Irow, 4).Value = TextBox2.Text
ws.Cells(Irow, 5).Value = TextBox3.Text
ws.Cells(Irow, 6).Value = TextBox4.Text
ComboBox1.Text = ""
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
Exit For
End If
Next r
End With
End Sub
Re: เป็นCode สำหรับใช้บันทึกข้อมูล
Posted: Tue Jun 24, 2014 6:30 pm
by snasui

ตัวอย่างการปรับ Code ตามด้านล่างครับ
Code: Select all
Private Sub ComboBox1_Change()
On Error Resume Next
Set myRange = Worksheets("sheet1").Range("num")
With Application.WorksheetFunction
' ComboBox1.Value = .VLookup(CLng(ComboBox1.Text), myRange, 1, False)
TextBox1.Text = .VLookup(CLng(ComboBox1.Text), Range("data"), 2, False)
TextBox2.Text = .VLookup(CLng(ComboBox1.Text), Range("data"), 3, False)
TextBox3.Text = .Text(.VLookup(CLng(ComboBox1.Text), Range("data"), 4, False), "dd/mm/yyyy")
TextBox4.Text = .VLookup(CLng(ComboBox1.Text), Range("data"), 5, False)
End With
End Sub
Private Sub CommandButton1_Click()
Dim rAll As Range, r As Range
Dim iRow As Long
Set ws = Worksheets("sheet1")
With ws
Set rAll = .Range("b3", .Range("b" & Rows.Count).End(xlUp))
If Application.CountIf(rAll, ComboBox1.Text) > 0 Then
iRow = Application.Match(CLng(ComboBox1.Text), .Range("b:b"), 0)
Else
iRow = .Range(rAll.Rows.Count).Row + 1
End If
ws.Cells(iRow, 3).Value = TextBox1.Text
ws.Cells(iRow, 4).Value = TextBox2.Text
ws.Cells(iRow, 5).Value = Application.Text(TextBox3.Text, "dd/mm/yyyy")
ws.Cells(iRow, 6).Value = TextBox4.Text
ws.Cells(iRow, 2).Value = ComboBox1.Text
ComboBox1.Text = ""
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
End With
End Sub
Re: เป็นCode สำหรับใช้บันทึกข้อมูล
Posted: Tue Jun 24, 2014 8:51 pm
by pongpang
เรียน อาจารย์คนควน
ขอบคุณมากครับที่ได้กรุณา สำหรับCode ได้นำไปใช้แล้ว แต่เกิดปัญหา ดังนี้
1.เมื่อต้องการป้อนข้อมูลเพิ่มเมื่อเริ่มคีย์เลขประจำตัว เช่น คีย์เลข 12 ก็จะแสดงข้อมูลของเลขที่ 1 ครับ
2.เมื่อป้อนข้อมูลในฟอร์มเสร็จ คลิกปุ่มเพิ่ม/ปรับปรุง จะเกิดดีบั๊ก ตามภาพครับ
011.png
Code: Select all
Private Sub CommandButton1_Click()
Dim rAll As Range, r As Range
Dim iRow As Long
Set ws = Worksheets("sheet1")
With ws
Set rAll = .Range("b3", .Range("b" & Rows.Count).End(xlUp))
If Application.CountIf(rAll, ComboBox1.Text) > 0 Then
iRow = Application.Match(CLng(ComboBox1.Text), .Range("b:b"), 0)
Else
iRow = .Range(rAll.Rows.Count).Row + 1
End If
ws.Cells(iRow, 3).Value = TextBox1.Text
ws.Cells(iRow, 4).Value = TextBox2.Text
ws.Cells(iRow, 5).Value = Application.Text(TextBox3.Text, "dd/mm/yyyy")
ws.Cells(iRow, 6).Value = TextBox4.Text
ws.Cells(iRow, 2).Value = ComboBox1.Text
ComboBox1.Text = ""
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
End With
End Sub
ขอความกรุณาขอความอนุเคราะห์อีกครับ
Re: เป็นCode สำหรับใช้บันทึกข้อมูล
Posted: Tue Jun 24, 2014 9:20 pm
by snasui

บรรทัดที่ Error ลองปรับเป็น
Code: Select all
iRow = rAll(rAll.Rows.Count).Row + 1
ส่วนการที่คีย์ค่าใน ComboBox แล้วมีการ Lookup เอาค่าเฉพาะหลักแรกมาให้เป็นเพราะคุณเขียนให้ Check การเปลี่ยนแปลงของ ComboBox ซึ่งจะต้องแก้มาเอง
จาก
ComboBox1_Change() หมายถึง Code ที่อยู่ภายใน Procedure นี้จะทำงานทุกครั้งทีมีการเปลียนแปลงใน ComboBox1 ทุกการคีย์จะเกิดกระทบกับ Event นี้เสมอ เมื่อคีย์ 1 ก็จะไปดึงค่าที่เกียวกับ 1 มาแสดง หากคีย์คีย์ตัวถัดมาแม้จะไม่สามารถ Lookup ค่ามาได้ก็จะยังแสดงค่าเดิมเพราะไปกำหนด
On error resume next เอาไว้
การใช้งานของ ComboBox เน้นที่ให้เลือกจากค่าที่มี ไม่ใช่ให้คีย์เข้าไปเอง หากต้องการให้เลือกได้ คีย์เข้าไปเองด้วยก็ต้องปรับ Code เดิมมาครับ
Re: เป็นCode สำหรับใช้บันทึกข้อมูล
Posted: Tue Jun 24, 2014 9:39 pm
by pongpang
เรียน อาจารย์ คนควน
ขอบคุณมากครับ สามารถนำไปใช้ได้ ส่วนที่จะต้องเขียนเองจะค่อย ๆ ทดลอง และถ้ามีปัญหาก็ต้องขอความกรุณอาจารย์อีก
ขอบคุณอีกครั้ง ครับ