รบกวนสอบถามเรื่อง VBA ใน EXCEL ให้ดักภาษาไทยครับ



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

08 เม.ย. 63 , 12:17:59
อ่าน 190 ครั้ง

taeclubz

  • สมาชิกไท.Access
  • กระทู้: 7

  • ขอบคุณ ไท.Access

    • ดูรายละเอียด

รบกวนผู้รู้หน่อยครับ ผมอยากเขียน VBA EXCEL ให้ดักภาษาไทยอ่ะครับ
เช่น Cell A1 ระบุได้แค่ 4 ตัวอักษร และ ระบุได้แค่ ตัวเลข และตัวภาษาอังกฤษ(พิมพ์เล็กหรือพิมพ์ใหญ่ก็ได้)
หากเจอภาษาไทย ให้แจ้งเตือนและหยุดการทำงาน แต่ถ้าไม่มีข้อผิดพลาด ( มี 4 ตัวอักษร และ ไม่ใช่ภาษาไทย ) ให้ทำงานต่อได้
ต้องเขียนโค๊ดประมาณไหนอ่ะครับ รบกวนผู้รู้ด้วยครับ

 

11 เม.ย. 63 , 17:36:05
ตอบกลับ #1

Mr. J (^J^)

ลองดูครับ เขียนแบบลูกทุ่งและรวบรัดครับ

ที่ Sheet นั้นๆ
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address = "$A$1" Then ' $A$1 ตำแหน่งที่ต้องการดัก
       If Len(Target) > 4 Then   'มากกว่า 4 ตัวอักษร
           MsgBox "เซลล์ " & Replace(Target.Address, "$", "") & " " & _
                       "ระบุได้แค่ 4 ตัวอักษร", 32, "ข้อผิดพลาด"
           Target.Value = ""  'Reset เพื่อเข้า Event นี้อีกครั้ง (หากไม่จะไม่มีเหตุการณ์ Change นี้)
           Range(Target.Address).Select  'กลับไปที่ Cell เดิม
           Exit Sub
       End If
       
       If Not isNumEN(Target.Value) Then
           MsgBox "เซลล์ " & Replace(Target.Address, "$", "") & " " & _
                       " ระบุได้แค่ ตัวเลข และตัวภาษาอังกฤษ(พิมพ์เล็กหรือพิมพ์ใหญ่ก็ได้)", 32, "ข้อผิดพลาด"
           Target.Value = ""  'Reset เพื่อเข้า Event นี้อีกครั้ง (หากไม่จะไม่มีเหตุการณ์ Change นี้)
           Range(Target.Address).Select  'กลับไปที่ Cell เดิม
       End If
   End If
End Sub


ที่ Module หรือในชิตนั้นๆ ถ้าใช้แค่ชีตเดียว
Function isNumEN(xTarget As String) As Boolean
   Dim i As Long
   Dim j As Long
   Dim x As String
   Dim isOk As Boolean
   
   isOk = True
   j = Len(xTarget)
   For i = 1 To j
        x = Mid(xTarget, i, 1)
        If (Asc(x) >= 48 And Asc(x) <= 57) Or _
           (Asc(x) >= 65 And Asc(x) <= 90) Or _
           (Asc(x) >= 97 And Asc(x) <= 122) Then
           '  48=0  57=9
           '  65=A  90=Z
           '  97=a  122=z
        Else
            isOk = False
            Exit For  'เจอไม่ใช่ ให้ออกมาเลย
        End If
   Next i
   isNumEN = isOk
End Function

"บุญ หรือ บาป"  ใครก็จับใส่มือเราไม่ได้  มีเพียงเราเท่านั้นที่เป็นผู้กระทำขึ้นเอง
 (สิ่งที่คนอื่น กระทำ  คือ กรรมของเขา | สิ่งที่ตัวเรา กระทำ  คือ กรรมของเรา)

      ไม่ว่าจะกี่คำพูด จะกี่กระทำ ที่กระทบกระทั้ง ให้สะท้านกายสะเทือนใจ
                        จงอย่าไหวหวั่น มีสติเท่าทันเข้าไว้
 
โพสต์นี้ได้รับคำขอบคุณจาก: taeclubz

13 เม.ย. 63 , 13:49:28
ตอบกลับ #2

taeclubz

  • สมาชิกไท.Access
  • กระทู้: 7

  • ขอบคุณ ไท.Access

    • ดูรายละเอียด

ขอบพระคุณมากๆครับท่าน เป็นประโยชน์มากครับ

ลองดูครับ เขียนแบบลูกทุ่งและรวบรัดครับ

ที่ Sheet นั้นๆ
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address = "$A$1" Then ' $A$1 ตำแหน่งที่ต้องการดัก
       If Len(Target) > 4 Then   'มากกว่า 4 ตัวอักษร
           MsgBox "เซลล์ " & Replace(Target.Address, "$", "") & " " & _
                       "ระบุได้แค่ 4 ตัวอักษร", 32, "ข้อผิดพลาด"
           Target.Value = ""  'Reset เพื่อเข้า Event นี้อีกครั้ง (หากไม่จะไม่มีเหตุการณ์ Change นี้)
           Range(Target.Address).Select  'กลับไปที่ Cell เดิม
           Exit Sub
       End If
       
       If Not isNumEN(Target.Value) Then
           MsgBox "เซลล์ " & Replace(Target.Address, "$", "") & " " & _
                       " ระบุได้แค่ ตัวเลข และตัวภาษาอังกฤษ(พิมพ์เล็กหรือพิมพ์ใหญ่ก็ได้)", 32, "ข้อผิดพลาด"
           Target.Value = ""  'Reset เพื่อเข้า Event นี้อีกครั้ง (หากไม่จะไม่มีเหตุการณ์ Change นี้)
           Range(Target.Address).Select  'กลับไปที่ Cell เดิม
       End If
   End If
End Sub


ที่ Module หรือในชิตนั้นๆ ถ้าใช้แค่ชีตเดียว
Function isNumEN(xTarget As String) As Boolean
   Dim i As Long
   Dim j As Long
   Dim x As String
   Dim isOk As Boolean
   
   isOk = True
   j = Len(xTarget)
   For i = 1 To j
        x = Mid(xTarget, i, 1)
        If (Asc(x) >= 48 And Asc(x) <= 57) Or _
           (Asc(x) >= 65 And Asc(x) <= 90) Or _
           (Asc(x) >= 97 And Asc(x) <= 122) Then
           '  48=0  57=9
           '  65=A  90=Z
           '  97=a  122=z
        Else
            isOk = False
            Exit For  'เจอไม่ใช่ ให้ออกมาเลย
        End If
   Next i
   isNumEN = isOk
End Function

 


บอร์ดเรียนรู้ Access สำหรับคนไทย