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
:D สามารถใช้ 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
:D อันนั้นต้องทดลองเอง ติดแล้วค่อยถามกันครับ

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

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
:D 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
:D 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
:D ลองปรับ 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
:D ช่วยโพสต์ 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