:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

ป้องกันการกรอกข้อมูลซ้ำ UserForm

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
san02551
Member
Member
Posts: 120
Joined: Fri May 06, 2011 2:15 pm

ป้องกันการกรอกข้อมูลซ้ำ UserForm

#1

Post by san02551 »

กรอกข้อมูลที่ UserForm บันทึกที่ Sheet Data ถ้าข้อมูล ที่ A3:A2000 ซ้ำกัน ให้แสดงข้อความว่า ข้อมูลซ้ำครับ (แสดงที่ UserForm ครับ)
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm

#2

Post by snasui »

:D สามารถใช้ If เข้าไปดักได้ครับ ยกตัวอย่างเช่น

Code: Select all

if application.countif(range("a:a"),textbox1.text) > 0 then
   msgbox "abcdef"
   exit sub
end if
san02551
Member
Member
Posts: 120
Joined: Fri May 06, 2011 2:15 pm

Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm

#3

Post by san02551 »

ผมติดปัญหาตรงที่ไม่ทราบว่าผมต้องนำ โค้ด
if application.countif(range("a:a"),textbox1.text) > 0 then   
msgbox "abcdef"   
exit sub
end if
ไปวางไว้ส่วนไหนของ UserForm หรือวางไว้ที่ Sheet Data เซลล์ไหนครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm

#4

Post by snasui »

:D อันนั้นต้องทดลองเอง ติดแล้วค่อยถามกันครับ

ความจำเป็นอย่างหนึ่งของการใช้ VBA ในทุกระยะ คือการทดสอบทดลอง ไม่มีทางที่จู่ ๆ จะลุกขึ้นมาเก่ง VBA ได้ภายในวันสองวันครับ
san02551
Member
Member
Posts: 120
Joined: Fri May 06, 2011 2:15 pm

Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm

#5

Post by san02551 »

ผมนำมาวางที่ UserForm1 แล้ว ยังเพ่ิ่มเลข 222 ลงไปได้อีก
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm

#6

Post 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
san02551
Member
Member
Posts: 120
Joined: Fri May 06, 2011 2:15 pm

Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm

#7

Post by san02551 »

แจ้งผล และอนุญาตเผยแพร่ครับ
ผมถามและผมนั่งทดสอบอยู่หลายวัน พึ่งคิดและทำได้ ผมขอขอบคุณมา ณที่นี้ด้วย
ผมได้แนบไฟล์เพื่ออาจเป็นประโยนช์บ้าง ครับ
You do not have the required permissions to view the files attached to this post.
san02551
Member
Member
Posts: 120
Joined: Fri May 06, 2011 2:15 pm

Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm

#8

Post by san02551 »

ช่วยตรวจสอบ code ให้ด้วยครับ ตามไฟล์ที่แนบ
ถ้าผมคลิก Run ที่หน้าต่าง VBAโปรแกรมจะแจ้งเตือนว่าข้อมูลซ้ำ ครับ
แต่ถ้าคลิกปุ่ม ที่ Sheet Menu ทดลองกรอกข้อมูลดู สามารถกรอกเลขประจำตัวซ้ำได้ โปรแกรมจะไม่แจ้งว่า ข้อมูลซ้ำครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm

#9

Post 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
san02551
Member
Member
Posts: 120
Joined: Fri May 06, 2011 2:15 pm

Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm

#10

Post by san02551 »

เรียนอาจารย์ที่เคารพ
ผมต้องการเพิ่ม UserForm2 ขึ้นมาเพื่อ เรียกข้อมูลนักเรียน โดยใช้ TextBox1 ข้อมูลนักเรียนจะแสดงที่ UserForm2 และ UserForm3 ตามลำดับ
และเมื่อแก้ไขแล้วก็บันทึกข้อมูลเดิมครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm

#11

Post by snasui »

:D ช่วยแจ้งว่าปัญหาก่อนหน้าแก้ไขได้แล้วหรือไม่ก่อนที่จะถามคำถามถัดไปครับ
san02551
Member
Member
Posts: 120
Joined: Fri May 06, 2011 2:15 pm

Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm

#12

Post by san02551 »

ปัญหาก่อนหน้า ทำการแก้ไขแล้วครับ UserForm1
ตอนนี้จะทำ UserForm2 ขึ้นมา เพื่อค้นหานักเรียนจากเลขประจำตัว เพื่อทำการแก้ไขข้อมูล แลบันทึกใหม่ครับ
จะทำหลาย TextBox ครับ เอาไว้กรอกคะแนนและเกรดนักเรียน
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm

#13

Post by snasui »

:D UserForm2 ติดปัญหาอะไรที่บรรทัดใด ต้องการคำตอบเป็นอย่างไร อธิบายมาด้วยครับ
san02551
Member
Member
Posts: 120
Joined: Fri May 06, 2011 2:15 pm

Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm

#14

Post by san02551 »

ติดปัญหาที่ ผมต้องการพิมพ์เลขประจำตัวนักเรียน (ดึงข้อมูลมาจาก Sheet Data) ที่ TextBox1
และให้แสดงชื่อ นามสกุล ที่ TextBox2 ชั้น แสดงที่ TextBox3
และมีปุ่มบันทึก ข้อมูลที่แก้ไขครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm

#15

Post by snasui »

:D Code ในแต่ละข้อที่ติด เขียนไว้ว่าอย่างไรครับ

ติดที่่ว่านั้น หมายถึงต้องเขียนมาเองแล้ว และทำงานไม่ถูกต้องหรือไม่ทำงาน ไม่ใช่ติดว่าเขียนไม่ได้หรือไม่รู้ว่าจะเขียนอย่างไรครับ
san02551
Member
Member
Posts: 120
Joined: Fri May 06, 2011 2:15 pm

Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm

#16

Post 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
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ป้องกันการกรอกข้อมูลซ้ำ UserForm

#17

Post 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
san02551
Member
Member
Posts: 120
Joined: Fri May 06, 2011 2:15 pm

ทำ userForm แก้ไขข้อมูล

#18

Post 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

เรียน อาจารย์ ช่วยปรับโค้ดให้ด้วย

ผมได้แนบไฟล์มาด้วย
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ทำ userForm แก้ไขข้อมูล

#19

Post by snasui »

:D ช่วยโพสต์ Code ให้เป็น Code ตาม Link นี้ด้วย viewtopic.php?f=3&t=1187 เพื่อจะได้สะดวกในการอ่าน

กระทู้ก่อนหน้านี้ได้คำตอบแล้วหรือไม่ ถ้าไม่ติดขัดอะไรตรงไหน หากเป็นเรื่องเดียวกันให้ถามในกระทู้เดิมครับ
san02551
Member
Member
Posts: 120
Joined: Fri May 06, 2011 2:15 pm

Re: ทำ userForm แก้ไขข้อมูล

#20

Post 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

Post Reply