1
ห้อง MS Access / : รบกวนสอบถามเรื่อง VBA ใน EXCEL ให้ดักภาษาไทยครับ
« เมื่อ: 11 เม.ย. 63 , 17:36:05 »
ลองดูครับ เขียนแบบลูกทุ่งและรวบรัดครับ
ที่ 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
ที่ 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