การตรวจสอบตัวเลข ด้วย vba
การตรวจสอบว่า ข้อความที่พิมพ์เข้ามาเป็นตัวเลขหรือไม่ เราใช้ฟังก์ชัน isNumeric() เพื่อตรวจสอบ แต่ฟังก์ชันนี้ ยังอาจจะไม่ได้ตรงตามที่เราต้องการมากนัก เนื่องจาก ยังอนุญาตให้มีเครื่องหมาย ต่าง ๆ เช่นคอมม่า เครื่องหมาย + เป็นต้น และที่สำคัญคือ ถ้ามีการใช้ตัวอักษร d หรือ e ผสมกับตัวเลข ก็จะถือว่า เป็นตัวเลขด้วย เช่น 10E14 ฟังก์ชัน isNumeric() จะถือว่า เป็นตัวเลข เพราะ จริง ๆ ก็คือตัวเลขชนิดหนึ่งเหมือนกัน เป็น Scientific Notation
แต่จริง ๆ เราต้องการให้ตรวจสอบว่า เป็นตัวเลข ตั้งแต่ 0 ถึง 9 เท่านั้น ไม่ต้องการให้มีเครื่องหมายใด ๆ หรือ ตัวอักษรใด ๆ ทั้งสิ้น เช่น ต้องการตรวจสอบว่า พิมพ์รหัสไปรษณีย์ โดยไม่มีตัวอักษรใด ๆ ปนเข้ามา หรือไม่ เป็นต้น
ในกรณีอย่างนี้ เราต้องเขียนฟังก์ชันให้ตรวจสอบเอง โดยการเปรียบเทียบจากตัวอักษรที่กำหนด ฟังก์ชันที่ใช้ในการเปรียบเทียบ คือ instr() ดังต่อไปนี้
Function IsAllNumber(str As String) As Boolean
Dim allowedChar As String
allowedChar = "1234567890"
For i = 1 To Len(str)
If InStr(allowedChar, Mid(str, i, 1)) = 0 Then
IsAllNumber = False
Exit Function
End If
Next i
IsAllNumber = True
End Function
ตัวอย่างการเรียกใช้งาน
Dim isNum As Boolean
isNum = IsAllNumber(Me.txtProvinceCode)
If (isNum = False) Then
MsgBox "รหัสไปรษณีย์ไม่ถูกต้อง" & vbcrlf & "ใช้เฉพาะตัวเลข ต้องไม่มีตัวอักษร"
Cancel = True
Exit Sub
End If
อ้างอิง
http://www.vbforums.com/showthread.php?245774-yet-another-isNumeric-question
http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_21713173.html
แต่จริง ๆ เราต้องการให้ตรวจสอบว่า เป็นตัวเลข ตั้งแต่ 0 ถึง 9 เท่านั้น ไม่ต้องการให้มีเครื่องหมายใด ๆ หรือ ตัวอักษรใด ๆ ทั้งสิ้น เช่น ต้องการตรวจสอบว่า พิมพ์รหัสไปรษณีย์ โดยไม่มีตัวอักษรใด ๆ ปนเข้ามา หรือไม่ เป็นต้น
ในกรณีอย่างนี้ เราต้องเขียนฟังก์ชันให้ตรวจสอบเอง โดยการเปรียบเทียบจากตัวอักษรที่กำหนด ฟังก์ชันที่ใช้ในการเปรียบเทียบ คือ instr() ดังต่อไปนี้
Function IsAllNumber(str As String) As Boolean
Dim allowedChar As String
allowedChar = "1234567890"
For i = 1 To Len(str)
If InStr(allowedChar, Mid(str, i, 1)) = 0 Then
IsAllNumber = False
Exit Function
End If
Next i
IsAllNumber = True
End Function
ตัวอย่างการเรียกใช้งาน
Dim isNum As Boolean
isNum = IsAllNumber(Me.txtProvinceCode)
If (isNum = False) Then
MsgBox "รหัสไปรษณีย์ไม่ถูกต้อง" & vbcrlf & "ใช้เฉพาะตัวเลข ต้องไม่มีตัวอักษร"
Cancel = True
Exit Sub
End If
อ้างอิง
http://www.vbforums.com/showthread.php?245774-yet-another-isNumeric-question
http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_21713173.html
ความคิดเห็น
แสดงความคิดเห็น