Page 1 of 3
ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Mon Mar 03, 2014 11:41 am
by san02551
กรอกข้อมูลที่ UserForm บันทึกที่ Sheet Data ถ้าข้อมูล ที่ A3:A2000 ซ้ำกัน ให้แสดงข้อความว่า ข้อมูลซ้ำครับ (แสดงที่ UserForm ครับ)
Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Mon Mar 03, 2014 6:05 pm
by snasui
สามารถใช้ If เข้าไปดักได้ครับ ยกตัวอย่างเช่น
Code: Select all
if application.countif(range("a:a"),textbox1.text) > 0 then
msgbox "abcdef"
exit sub
end if
Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Mon Mar 03, 2014 9:25 pm
by san02551
ผมติดปัญหาตรงที่ไม่ทราบว่าผมต้องนำ โค้ด
if application.countif(range("a:a"),textbox1.text) > 0 then
msgbox "abcdef"
exit sub
end if
ไปวางไว้ส่วนไหนของ UserForm หรือวางไว้ที่ Sheet Data เซลล์ไหนครับ
Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Mon Mar 03, 2014 9:48 pm
by snasui
อันนั้นต้องทดลองเอง ติดแล้วค่อยถามกันครับ
ความจำเป็นอย่างหนึ่งของการใช้ VBA ในทุกระยะ คือการทดสอบทดลอง ไม่มีทางที่จู่ ๆ จะลุกขึ้นมาเก่ง VBA ได้ภายในวันสองวันครับ
Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Mon Mar 03, 2014 10:11 pm
by san02551
ผมนำมาวางที่ UserForm1 แล้ว ยังเพ่ิ่มเลข 222 ลงไปได้อีก
Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Mon Mar 03, 2014 10:29 pm
by snasui
ตัวอย่างการวาง Code ครับ
Code: Select all
Private Sub CommandButton1_Click()
Dim r As Long
If Application.CountIf(Range("a:a"), TextBox1.Text) > 0 Then
MsgBox "abcdef"
Exit Sub
End If
' Other code
End Sub
Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Thu Mar 06, 2014 10:52 am
by san02551
แจ้งผล และอนุญาตเผยแพร่ครับ
ผมถามและผมนั่งทดสอบอยู่หลายวัน พึ่งคิดและทำได้ ผมขอขอบคุณมา ณที่นี้ด้วย
ผมได้แนบไฟล์เพื่ออาจเป็นประโยนช์บ้าง ครับ
Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Thu Mar 06, 2014 12:08 pm
by san02551
ช่วยตรวจสอบ code ให้ด้วยครับ ตามไฟล์ที่แนบ
ถ้าผมคลิก Run ที่หน้าต่าง VBAโปรแกรมจะแจ้งเตือนว่าข้อมูลซ้ำ ครับ
แต่ถ้าคลิกปุ่ม ที่ Sheet Menu ทดลองกรอกข้อมูลดู สามารถกรอกเลขประจำตัวซ้ำได้ โปรแกรมจะไม่แจ้งว่า ข้อมูลซ้ำครับ
Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Thu Mar 06, 2014 12:43 pm
by snasui
ลองปรับ Code เป็นตามด้านล่าง สังเกตการเปลี่ยนแปลงที่
with
และ
.range
Code: Select all
Private Sub CommandButton1_Click()
Dim r As Long
With Sheets("data")
If Application.CountIf(.Range("a:a"), TextBox1.Text) > 0 Then
MsgBox "มีเลขประจำตัวแล้ว!!!"
Exit Sub
End If
' Other code
If TextBox2.Text <> "" And Application.CountIf(.Range("b:b"), TextBox2.Text) > 0 Then
MsgBox "ชื่อนักเรียนซ้ำ!!!"
Exit Sub
End If
r = .Range("a" & Rows.Count).End(xlUp).Row + 1
.Cells(r, 1) = TextBox1.Text
.Cells(r, 2) = TextBox2.Text
.Cells(r, 3) = ComboBox1.Text
End With
End Sub
Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Thu Mar 06, 2014 8:36 pm
by san02551
เรียนอาจารย์ที่เคารพ
ผมต้องการเพิ่ม UserForm2 ขึ้นมาเพื่อ เรียกข้อมูลนักเรียน โดยใช้ TextBox1 ข้อมูลนักเรียนจะแสดงที่ UserForm2 และ UserForm3 ตามลำดับ
และเมื่อแก้ไขแล้วก็บันทึกข้อมูลเดิมครับ
Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Thu Mar 06, 2014 8:40 pm
by snasui
ช่วยแจ้งว่าปัญหาก่อนหน้าแก้ไขได้แล้วหรือไม่ก่อนที่จะถามคำถามถัดไปครับ
Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Thu Mar 06, 2014 9:03 pm
by san02551
ปัญหาก่อนหน้า ทำการแก้ไขแล้วครับ UserForm1
ตอนนี้จะทำ UserForm2 ขึ้นมา เพื่อค้นหานักเรียนจากเลขประจำตัว เพื่อทำการแก้ไขข้อมูล แลบันทึกใหม่ครับ
จะทำหลาย TextBox ครับ เอาไว้กรอกคะแนนและเกรดนักเรียน
Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Thu Mar 06, 2014 9:08 pm
by snasui
UserForm2 ติดปัญหาอะไรที่บรรทัดใด ต้องการคำตอบเป็นอย่างไร อธิบายมาด้วยครับ
Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Thu Mar 06, 2014 9:17 pm
by san02551
ติดปัญหาที่ ผมต้องการพิมพ์เลขประจำตัวนักเรียน (ดึงข้อมูลมาจาก Sheet Data) ที่ TextBox1
และให้แสดงชื่อ นามสกุล ที่ TextBox2 ชั้น แสดงที่ TextBox3
และมีปุ่มบันทึก ข้อมูลที่แก้ไขครับ
Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Thu Mar 06, 2014 9:18 pm
by snasui
Code ในแต่ละข้อที่ติด เขียนไว้ว่าอย่างไรครับ
ติดที่่ว่านั้น หมายถึงต้องเขียนมาเองแล้ว และทำงานไม่ถูกต้องหรือไม่ทำงาน ไม่ใช่ติดว่าเขียนไม่ได้หรือไม่รู้ว่าจะเขียนอย่างไรครับ
Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Thu Mar 06, 2014 11:32 pm
by san02551
โค้ดไม่ทำงานครับ
Private Sub TextBox1_Change()
MyTextBox1 = TextBox1.Text 'ข้อมูลที่พิมพ์งไปครับ'
Sheets("Data").Select
Range("A2").Select
Do While True
If MyTextBox1 = ActiveCell.Value Then
TextBox2.Text = ActiveCell.Offset(0, 1).Value'ชื่อ นามสกุลนักเรียนที่ต้องการแสดงครับ'
TextBox3.Text = ActiveCell.Offset(0, 2).Value'ชั้นของนักเรียนครับ'
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm
Posted: Fri Mar 07, 2014 4:57 pm
by snasui
ลองปรับ Code เป็นตามด้านล่างครับ
Code: Select all
Private Sub ComboBox1_Change()
On Error Resume Next
MyComboBox1 = ComboBox1.Text
Sheets("Data").Select
Range("a2").Select
Do While ActiveCell.Row <= Range("a" & Rows.Count).End(xlUp).Row
If CInt(MyComboBox1) = ActiveCell.Value Then
TextBox1.Text = ActiveCell.Offset(0, 1).Value
TextBox2.Text = ActiveCell.Offset(0, 2).Value
Exit Sub
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub
ทำ userForm แก้ไขข้อมูล
Posted: Sat Mar 08, 2014 8:24 am
by san02551
กรณีที่ผมทำ UserForm2 เพื่อดึงข้อมูลจาก Sheet Data ด้วย ComboBox1 และจะทำการแก้ไขข้อมูล โดยทำปุ่มบันทึก แต่ข้อมูลไม่สามารถแก้ไขได้
Private Sub CommandButton1_Click()
Dim lastRow As Object 'ปุ่มที่บันทึก แก้ไขข้อมูล'
Set lastRow = Data.Range("b65536").End(xlUp)
lastRow.Offset(1, 0).Value = ComboBox1.Text
lastRow.Offset(1, 1).Value = TextBox1.Text
lastRow.Offset(1, 2).Value = TextBox2.Text
MsgBox "One record written to Sheet1" ' "µéͧ¡ÒÃà¡çº¢éÍÁÙÅËÃ×ÍäÁè", vbOKCancel
response = MsgBox("Do you want to enter another record?", _
vbYesNo) 'MsgBox("¨Ð¡ÃÍ¡¢éÍÁÙÅÍÕ¡ËÃ×ÍäÁè?", _
vbYesNo)
If response = vbYes Then
ComboBox1.Text = ""
TextBox1.Text = ""
TextBox2.Text = ""
ComboBox1.SetFocus
Else
Unload Me
End If
End Sub
เรียน อาจารย์ ช่วยปรับโค้ดให้ด้วย
ผมได้แนบไฟล์มาด้วย
Re: ทำ userForm แก้ไขข้อมูล
Posted: Sat Mar 08, 2014 9:10 am
by snasui
ช่วยโพสต์ Code ให้เป็น Code ตาม Link นี้ด้วย
viewtopic.php?f=3&t=1187 เพื่อจะได้สะดวกในการอ่าน
กระทู้ก่อนหน้านี้ได้คำตอบแล้วหรือไม่ ถ้าไม่ติดขัดอะไรตรงไหน หากเป็นเรื่องเดียวกันให้ถามในกระทู้เดิมครับ
Re: ทำ userForm แก้ไขข้อมูล
Posted: Sat Mar 08, 2014 9:14 am
by san02551
Code: Select all
Private Sub ComboBox1_Change()
On Error Resume Next
Set myRange = Worksheets("Data").Range("A2:D30")
ComboBox1.Value = Application.WorksheetFunction.VLookup(CLng(ComboBox1), myRange, 1, False)
TextBox1.Value = Application.WorksheetFunction.VLookup(CLng(ComboBox1), myRange, 2, False)
TextBox2.Value = Application.WorksheetFunction.VLookup(CLng(ComboBox1), myRange, 3, False)
If Err <> 0 Then
MsgBox "äÁèÁÕÃÒ¡Ò÷Õè·èÒ¹àÅ×Í¡", vbQuestion
TextBox1.Text = ""
TextBox2.Text = ""
Exit Sub
End If
End Sub
Private Sub CommandButton1_Click()
Dim lastRow As Object
Set lastRow = Data.Range("b65536").End(xlUp)
lastRow.Offset(1, 0).Value = ComboBox1.Text
lastRow.Offset(1, 1).Value = TextBox1.Text
lastRow.Offset(1, 2).Value = TextBox2.Text
MsgBox "One record written to Sheet1" ' "µéͧ¡ÒÃà¡çº¢éÍÁÙÅËÃ×ÍäÁè", vbOKCancel
response = MsgBox("Do you want to enter another record?", _
vbYesNo) 'MsgBox("¨Ð¡ÃÍ¡¢éÍÁÙÅÍÕ¡ËÃ×ÍäÁè?", _
vbYesNo)
If response = vbYes Then
ComboBox1.Text = ""
TextBox1.Text = ""
TextBox2.Text = ""
ComboBox1.SetFocus
Else
Unload Me
End If
End Sub