: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

ตั้งเงื่อนไขว่าถ้าค่าซ้ำให้แจ้งเตือนแต่เวลาไม่เจอค่าซ้ำกลับแจ้งเตือนเหมือนกัน

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
apforever
Member
Member
Posts: 14
Joined: Mon Oct 01, 2018 2:51 pm

ตั้งเงื่อนไขว่าถ้าค่าซ้ำให้แจ้งเตือนแต่เวลาไม่เจอค่าซ้ำกลับแจ้งเตือนเหมือนกัน

#1

Post by apforever »

เงื่อนไขคือเวลา add ข้อมูลไปแล้วถ้ามีค่าซ้ำกันจะแจ้ง msgbox ถ้าไม่ซ้ำก็สามารถ add ได้ตามปกติ แต่พบปัญหาว่าพบค่าซ้ำหรือไม่ซ้ำก็แจ้ง msgbox ตลอด ลองพยายามแก้ code สรุปว่าพบค่าซ้ำหรือไม่ซ้ำ msgbox ก็จะไม่ขึ้นทั้งคู่ รบกวนดู code ให้หน่อยครับว่าควรปรับตรงไหนอย่างไรบ้าง ขอบคุณครับ

รูปประกอบครับ
https://www.picz.in.th/image/11111.tdgaHg
https://www.picz.in.th/image/22222.tdizIR

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Intersect(Target, Range("EMP_NO")) = "" Then Exit Sub
    If Not Intersect(Target, Range("EMP_NO")) Is Nothing Then
        If Len(Intersect(Target, Range("EMP_NO"))) <> 6 Then
        MsgBox "กรุณาใส่ Emp No. ให้ถูกต้อง", vbCritical, "Denied Access"
        Intersect(Target, Range("EMP_NO")).Select
        Intersect(Target, Range("EMP_NO")).Value = ""
        Else
            If Not IsNumeric(Intersect(Target, Range("EMP_NO"))) Then
            MsgBox "กรุณาใส่ Emp No. ให้ถูกต้อง", vbCritical, "Denied Access"
            Intersect(Target, Range("EMP_NO")).Select
            Intersect(Target, Range("EMP_NO")).Value = ""
                Else
                Dim rows1, i As Long
                rows1 = Sheets("Sheet1").Range("A1").CurrentRegion.Rows.Count
                For i = 2 To rows1
                If Sheets("Sheet1").Cells(i, 1) = Intersect(Target, Range("EMP_NO")) Then
                Sheets("Sheet1").Cells(i, 1).Select
                Intersect(Target, Range("EMP_NO")) = ""
                Dim msgbox1 As Integer
                msgbox1 = MsgBox("Emp No. หมายเลข : " & Sheets("Sheet1").Cells(i, 1).Value & " มีอยู่ในระบบแล้ว ต้องการเปลี่ยนแปลงค่า Name หรือไม่", vbYesNo, "Denied Access")
                    If msgbox1 = vbYes Then
                    Dim msgbox2 As Variant
                    msgbox2 = InputBox("กรุณาใส่ค่าที่ต้องการ", "Input Data")
                    Sheets("Sheet1").Cells(i, 2) = msgbox2
                    End If
                Exit For
                End If
                Next i
            End If
        End If
    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: ตั้งเงื่อนไขว่าถ้าค่าซ้ำให้แจ้งเตือนแต่เวลาไม่เจอค่าซ้ำกลับแจ้งเตือนเหมือนกัน

#2

Post by snasui »

:D ผมไม่ดูภาพที่แนบไว้ที่อื่น กรุณาอ่านกฎการใช้บอร์ดข้อ 4 ด้านบนอีกครั้งครับ

ตัวอย่าง Code การตรวจสอบว่าซ้ำหรือไม่ซ้ำ หากซ้ำจะมีการถามว่ายอมให้ซ้ำหรือไม่

Code: Select all

Dim rngEmpAll As Range, rsp As Integer
Dim iCount As Integer
If Target.Value = "" Then Exit Sub
With Me
    Set rngEmpAll = .Range("b2", .Range("b" & .Rows.Count) _
        .End(xlUp)).Offset(0, -1)
    For Each Rng In rngEmpAll
        If CStr(Target.Value) = CStr(Rng.Value) Then
            iCount = iCount + 1
        End If
    Next Rng
    If iCount > 0 Then
        rsp = MsgBox("Duplicate! Need to record?", vbYesNo, vbExclamation)
        If rsp = vbNo Then Target.ClearContents
    End If
End With
ลักษณะงานเช่นนี้ไม่จำเป็นต้องใช้ VBA ควรใช้ Validation แทนจะสะดวกและง่ายกว่ากันมากครับ
apforever
Member
Member
Posts: 14
Joined: Mon Oct 01, 2018 2:51 pm

Re: ตั้งเงื่อนไขว่าถ้าค่าซ้ำให้แจ้งเตือนแต่เวลาไม่เจอค่าซ้ำกลับแจ้งเตือนเหมือนกัน

#3

Post by apforever »

snasui wrote: Fri Mar 01, 2019 9:05 pm :D ผมไม่ดูภาพที่แนบไว้ที่อื่น กรุณาอ่านกฎการใช้บอร์ดข้อ 4 ด้านบนอีกครั้งครับ

ตัวอย่าง Code การตรวจสอบว่าซ้ำหรือไม่ซ้ำ หากซ้ำจะมีการถามว่ายอมให้ซ้ำหรือไม่

Code: Select all

Dim rngEmpAll As Range, rsp As Integer
Dim iCount As Integer
If Target.Value = "" Then Exit Sub
With Me
    Set rngEmpAll = .Range("b2", .Range("b" & .Rows.Count) _
        .End(xlUp)).Offset(0, -1)
    For Each Rng In rngEmpAll
        If CStr(Target.Value) = CStr(Rng.Value) Then
            iCount = iCount + 1
        End If
    Next Rng
    If iCount > 0 Then
        rsp = MsgBox("Duplicate! Need to record?", vbYesNo, vbExclamation)
        If rsp = vbNo Then Target.ClearContents
    End If
End With
ลักษณะงานเช่นนี้ไม่จำเป็นต้องใช้ VBA ควรใช้ Validation แทนจะสะดวกและง่ายกว่ากันมากครับ
ขอโทษที่ทำผิดกฏครับ :oops: และขอบคุณครับสำหรับคำแนะนำจะลองนำไปปรับใช้ดูครับ :thup:
Post Reply