กระทู้เก่าบอร์ด อ.Yeadram
4,122 16
URL.หัวข้อ /
URL
ขอโค๊ดควบคุมการคีย์ข้อมูลให้ตรงรูปแบบค่ะ
หนูสร้างฟอร์มเพื่อให้ผู้ใช้คีย์ข้อมูลพนักงาน ที่สำคัญคือฟิลด์ เลขรหัสประจำตัว 13 หลัก โดยหนูต้องการกำหนดเงื่อนไขดังนี้ค่ะ
1-ต้องคีย์ตัวเลขให้ครบ 13 หลัก = ถ้าไม่ครบให้ขึ้น MagBox เตือน
2-เลขรหัสจะซ้ำกับของเดิมไม่ได้ = ถ้าซ้ำให้ขึ้น MagBox เตือน
3-ให้โฟกัสอยู่ที่ฟิสด์เดิม จนกว่าจะทำถูกเงื่อนไข หรือยกเลิกการคีย์
หนูอขอทราบโค๊ดดังกล่าวว่าต้องเขียนอย่างไร และใส่ไว้ที่ตำแหน่งไหนค่ะ
1-ต้องคีย์ตัวเลขให้ครบ 13 หลัก = ถ้าไม่ครบให้ขึ้น MagBox เตือน
2-เลขรหัสจะซ้ำกับของเดิมไม่ได้ = ถ้าซ้ำให้ขึ้น MagBox เตือน
3-ให้โฟกัสอยู่ที่ฟิสด์เดิม จนกว่าจะทำถูกเงื่อนไข หรือยกเลิกการคีย์
หนูอขอทราบโค๊ดดังกล่าวว่าต้องเขียนอย่างไร และใส่ไว้ที่ตำแหน่งไหนค่ะ
16 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R00965
ขอขอบคุณ อาจารย์ yeadram ค่ะ แต่หนูยังไม่เข้าใจว่า จะเพิ่ม MsgBox คำเตือน ในแต่ละเหตุการ ได้ตรงไหนอย่างไร หนูลองใส่เพิ่มไประหว่างบรรทัดแล้วมัน Error ค่ะ ตอนนี้เลยยังทำต่อไม่ได้ รบกวนอาจารย์ช่วยชี้??นะอีกหน่อยนะคะ หนูเด็กใหม่ยังไม่ค่อยเข้าใจอะไรมากนักค่ะ
3 @R00967
ขออภัยครับ ลืมเรื่อง msg ที่คุณต้องการไปเลย
สังเกตดูโค้ดของ reply นี้กับ reply ก่อนหน้านะครับ มีจุดเหมือน จุดแตกต่างตรงไหนบ้าง อาจจะทำให้มือใหม่ๆ รู้จักวิธีพลิกๆ แพลงๆ ปรับๆ เปลี่ยนๆ นิดๆ หน่อยๆ มันก็จะตรง และลงตัวกับความต้องการของเราๆ ท่านๆ ได้ง่ายๆ ครับ
Private Sub tx_idcard_BeforeUpdate(Cancel As Integer)
if not isnumeric(tx_idcard) then
MsgBox "ข้อมูลที่กรอกไม่ใช่ตัวเลข", vbCritical, "ข้อมูลผิด"
cancel = True
Elseif len(tx_idcard)<>13 then
MsgBox "จำนวนอักขระ ไม่ถูกต้อง", vbCritical, "ข้อมูลผิด"
cancel = True
Elseif not isnull(Dlookup("em_idcard", "tbEmployee","[em_idcard] = " & tx_idcard)) then
MsgBox "รหัสนี้มีในระบบแล้ว", vbCritical, "ข้อมูลผิด"
cancel = True
End If
End Sub
สังเกตดูโค้ดของ reply นี้กับ reply ก่อนหน้านะครับ มีจุดเหมือน จุดแตกต่างตรงไหนบ้าง อาจจะทำให้มือใหม่ๆ รู้จักวิธีพลิกๆ แพลงๆ ปรับๆ เปลี่ยนๆ นิดๆ หน่อยๆ มันก็จะตรง และลงตัวกับความต้องการของเราๆ ท่านๆ ได้ง่ายๆ ครับ
4 @R00968
ตอบได้ทันใจดีจังเลยค่ะอาจารย์ หนูขอแจ้งปัญหาเพิ่มเติมนิดนึงค่ะอาจารย์ โค้ดของ reply แรกนั้นหนูลองเอา MsgBox ออกหมดเลย แต่มันก็ยัง Error เป็นสีแดงทุกบรรทัดเลยค่ะ ยังไม่ทราบว่าผิดตรงไหน แต่ตอนนี้ได้โค้ดของ reply หลังนี่กำลังจะลองดูค่ะ
ขอขอบคุณอาจารย์ที่กรุณาค่ะ
ขอขอบคุณอาจารย์ที่กรุณาค่ะ
5 @R00969
ขอรายงานผลค่ะอาจารย์
_เมื่อคีย์ข้อมูลไม่ครบ 13 หลักหรือผิดอักขระ MsgBox เตือนได้ถูกต้องค่ะ
แต่ว่า...
_เมื่อคีย์ข้อมูลซ้ำกับที่มีอยู่แล้ว มันจะ Error ที่บรรทัดล่างนี้ค่ะ
Elseif not isnull(Dlookup("em_idcard", "tbEmployee","[em_idcard] = " & tx_idcard)) then
หนูไม่ทราบว่ามันผิดตรงไหน ลองปรับแก้ดู (เดาสุ่ม) ก็ไม่ได้ผลค่ะอาจารย์
_เมื่อคีย์ข้อมูลไม่ครบ 13 หลักหรือผิดอักขระ MsgBox เตือนได้ถูกต้องค่ะ
แต่ว่า...
_เมื่อคีย์ข้อมูลซ้ำกับที่มีอยู่แล้ว มันจะ Error ที่บรรทัดล่างนี้ค่ะ
Elseif not isnull(Dlookup("em_idcard", "tbEmployee","[em_idcard] = " & tx_idcard)) then
หนูไม่ทราบว่ามันผิดตรงไหน ลองปรับแก้ดู (เดาสุ่ม) ก็ไม่ได้ผลค่ะอาจารย์
6 @R00971
ขอรายงานเพิ่มเติมค่ะอาจารย์
OK..ได้แล้วค่ะ...
ลองค้นหาเรื่อยไป พอดีไปเจอโค๊ดใน expert2you ของ อาจารย์ sakdapl ท่านเขียนเอาไว้ ซึ่งดูแล้วตรงตามที่หนูต้องการ จึงลองเอามาใช้ดู โดยเอามาแทนที่เฉพาะบรรทัดที่ Error นอกนั้นใช้อันเดิมของอาจารย์ yeadram ทั้งหมด ปรากฏว่าเรียบร้อยใช้ได้ครบถ้วนเข้ากันได้ดีค่ะ โค๊ดที่ อาจารย์ sakdapl เขียนไว้ เมื่อนำมาปรับแก้แล้ว จะมีดังนี้ค่ะ
ElseIf Nz(DLookup("em_idcard", "tbEmployee", "em_idcard='" & Me.tx_idcard & "'"), "zzzz") <> "zzzz" Then
ีหนูอยากทราบเพื่อเก็บไว้เป็นความรู้ค่ะอาจารย์ ว่า โค๊ดทั้งสองนี้มันมีความหมายแตกต่างกันอย่างไรค่ะ
ยังไงก็ต้องขอขอบคุณ อาารย์ yeadram และอาจารย์ sakdapl ไว้เป็นอย่างสูงนะคะ
OK..ได้แล้วค่ะ...
ลองค้นหาเรื่อยไป พอดีไปเจอโค๊ดใน expert2you ของ อาจารย์ sakdapl ท่านเขียนเอาไว้ ซึ่งดูแล้วตรงตามที่หนูต้องการ จึงลองเอามาใช้ดู โดยเอามาแทนที่เฉพาะบรรทัดที่ Error นอกนั้นใช้อันเดิมของอาจารย์ yeadram ทั้งหมด ปรากฏว่าเรียบร้อยใช้ได้ครบถ้วนเข้ากันได้ดีค่ะ โค๊ดที่ อาจารย์ sakdapl เขียนไว้ เมื่อนำมาปรับแก้แล้ว จะมีดังนี้ค่ะ
ElseIf Nz(DLookup("em_idcard", "tbEmployee", "em_idcard='" & Me.tx_idcard & "'"), "zzzz") <> "zzzz" Then
ีหนูอยากทราบเพื่อเก็บไว้เป็นความรู้ค่ะอาจารย์ ว่า โค๊ดทั้งสองนี้มันมีความหมายแตกต่างกันอย่างไรค่ะ
ยังไงก็ต้องขอขอบคุณ อาารย์ yeadram และอาจารย์ sakdapl ไว้เป็นอย่างสูงนะคะ
7 @R00972
ขอเรียนถามเพิ่มเติมเพื่อต้องการนำไปประยุกต์อีกหน่อยค่ะ
Private Sub tx_idcard_BeforeUpdate(Cancel As Integer)
if not isnumeric(tx_idcard) then
MsgBox "ข้อมูลที่กรอกไม่ใช่ตัวเลข", vbCritical, "ข้อมูลผิด"
cancel = True
จากโค๊ดคำสั่งที่อาจารย์ให้ไว้นี้ หากหนูต้องการประยุกต์นำไปใช้กับฟิลด์รหัสรูปแบบอื่น เช่น
รูปแบบของรหัสจะต้องเป็น A-0000 (ต้องเริ่มด้วย A-แล้วตามด้วยตัวเลขอีก4หลัก)
ลักษณะนี้เราต้องใช้โค๊ดอย่างไรคะอาจารย์
Private Sub tx_idcard_BeforeUpdate(Cancel As Integer)
if not isnumeric(tx_idcard) then
MsgBox "ข้อมูลที่กรอกไม่ใช่ตัวเลข", vbCritical, "ข้อมูลผิด"
cancel = True
จากโค๊ดคำสั่งที่อาจารย์ให้ไว้นี้ หากหนูต้องการประยุกต์นำไปใช้กับฟิลด์รหัสรูปแบบอื่น เช่น
รูปแบบของรหัสจะต้องเป็น A-0000 (ต้องเริ่มด้วย A-แล้วตามด้วยตัวเลขอีก4หลัก)
ลักษณะนี้เราต้องใช้โค๊ดอย่างไรคะอาจารย์
8 @R00974
ตอบ R00972
sq = "A-0000"
แยกการตรวจ sq ออกเป็นสองส่วน
ส่วนหน้าคือตัวอักษรและสัญลักษณ์ มีสองอักขระหน้าสุด ก็ใช้
if left(sq, 2)<>"A-" then
ส่วนที่เหลือ คือ อักขระ 4 ตัวหลังต้องการตรวจสอบว่าเป็นตัวเลขหรือไม่ ก็ใช้
if isnumeric(right(sq, 4)) then
เมื่อจะเอาสองการตรวจสอบมารวมกันก็อาจอยู่ในรูป
if left(sq, 2) <> "A-" OR not isnummeric(right(sq, 4)) then
----- คำสั่งเมื่อ ข้อมูลไม่ถูกต้อง เช่น cancel = true
Else
----- คำสั่งเมื่อข้อมูลถูกต้อง
End if
หรือหากต้องการแยกเงื่อนไขออกเพื่อจะแจ้งเหตุผิดพลาดออกเป็นคนละ message ก็อาจใช้ if--then--elseif--then-- หรือ อาจใช้ select--case ก็ได้
เช่น
if left(sq, 2) <> "A-" then
msgbox "กลุ่มรหัสไม่ถูกต้อง"
cancel=true
elseif not isnummeric(right(sq, 4)) then
msgbox "เลขลำดับ ผิดรูปแบบ"
cancel = true
end if
sq = "A-0000"
แยกการตรวจ sq ออกเป็นสองส่วน
ส่วนหน้าคือตัวอักษรและสัญลักษณ์ มีสองอักขระหน้าสุด ก็ใช้
if left(sq, 2)<>"A-" then
ส่วนที่เหลือ คือ อักขระ 4 ตัวหลังต้องการตรวจสอบว่าเป็นตัวเลขหรือไม่ ก็ใช้
if isnumeric(right(sq, 4)) then
เมื่อจะเอาสองการตรวจสอบมารวมกันก็อาจอยู่ในรูป
if left(sq, 2) <> "A-" OR not isnummeric(right(sq, 4)) then
----- คำสั่งเมื่อ ข้อมูลไม่ถูกต้อง เช่น cancel = true
Else
----- คำสั่งเมื่อข้อมูลถูกต้อง
End if
หรือหากต้องการแยกเงื่อนไขออกเพื่อจะแจ้งเหตุผิดพลาดออกเป็นคนละ message ก็อาจใช้ if--then--elseif--then-- หรือ อาจใช้ select--case ก็ได้
เช่น
if left(sq, 2) <> "A-" then
msgbox "กลุ่มรหัสไม่ถูกต้อง"
cancel=true
elseif not isnummeric(right(sq, 4)) then
msgbox "เลขลำดับ ผิดรูปแบบ"
cancel = true
end if
9 @R00975
ตอบ R00971
ความแตกต่างของ
ElseIf Nz(DLookup("em_idcard", "tbEmployee", "em_idcard='" & Me.tx_idcard & "'"), "zzzz") <> "zzzz" Then
กับ
Elseif not isnull(Dlookup("em_idcard", "tbEmployee","[em_idcard] = " & tx_idcard)) then
- โดยแนวคิด ตอบ ไม่แตกต่างกัน คือตรวจสอบว่าเคยมีข้อมูลนี้ในตารางหรือไม่
- โดยคำสั่ง
dlookup() คือการเข้าไปตรวจค้นจากแหล่งข้อมูล ถ้าผลการตรวจค้นไม่เจออะไรเลยจะคืนค่ามาเป็น NULL
อากิวร์เมนต์สุดท้ายคือเงื่อนไขการตรวจสอบ ของผมที่ตรวจสอบไม่ได้อาจเพราะเขียนเงื่อนไขผิด ไม่ได้ใส่ single quote คร่อมเอาไว้ในค่าเปรียบเทียบ ที่เหลือ ก็ ระหว่างของผมกับของ อ.sakdapl ก็เหมือนกันครับ
- nz() ของ อ.sakdapl คือการแทนค่าทันที ที่ผลลัพธ์เป็น NULL
nz(sq, "zzz") หมายความว่า ถ้าผลของ sq เป็นอื่นๆ ที่ไม่ใช่ NULL ฟังก์ชั่นนี้ จะคืนค่าเป็นผลนั้นๆ แต่ถ้าเป็น NULL เมื่อไหร่ มันจะคืนค่ามาเป็น zzz แทน
แล้ว อ.sakdapl เช็คต่อทันทีเลยว่า if nz(sq, "zzz")<> "zzz" then
มันเท่ากับ zzz หรือเปล่า
- ส่วน isnull ที่ผมใช้ จะตรวจสอบแค่ว่า ข้อมูลเป็น NULL หรือไม่ โดยจะปล่อยผลลัพธ์ให้เป็นอย่างที่เป็น ไม่มีการแทนค่าใดๆ เข้าไป
isnull(dlookup()) หมายความว่า ผลการค้นได้มาเป็นค่า NULL หรือไม่ โดยคำตอบที่ได้จะมีแค่สองทาง คือ True กับ False
ความแตกต่างของ
ElseIf Nz(DLookup("em_idcard", "tbEmployee", "em_idcard='" & Me.tx_idcard & "'"), "zzzz") <> "zzzz" Then
กับ
Elseif not isnull(Dlookup("em_idcard", "tbEmployee","[em_idcard] = " & tx_idcard)) then
- โดยแนวคิด ตอบ ไม่แตกต่างกัน คือตรวจสอบว่าเคยมีข้อมูลนี้ในตารางหรือไม่
- โดยคำสั่ง
dlookup() คือการเข้าไปตรวจค้นจากแหล่งข้อมูล ถ้าผลการตรวจค้นไม่เจออะไรเลยจะคืนค่ามาเป็น NULL
อากิวร์เมนต์สุดท้ายคือเงื่อนไขการตรวจสอบ ของผมที่ตรวจสอบไม่ได้อาจเพราะเขียนเงื่อนไขผิด ไม่ได้ใส่ single quote คร่อมเอาไว้ในค่าเปรียบเทียบ ที่เหลือ ก็ ระหว่างของผมกับของ อ.sakdapl ก็เหมือนกันครับ
- nz() ของ อ.sakdapl คือการแทนค่าทันที ที่ผลลัพธ์เป็น NULL
nz(sq, "zzz") หมายความว่า ถ้าผลของ sq เป็นอื่นๆ ที่ไม่ใช่ NULL ฟังก์ชั่นนี้ จะคืนค่าเป็นผลนั้นๆ แต่ถ้าเป็น NULL เมื่อไหร่ มันจะคืนค่ามาเป็น zzz แทน
แล้ว อ.sakdapl เช็คต่อทันทีเลยว่า if nz(sq, "zzz")<> "zzz" then
มันเท่ากับ zzz หรือเปล่า
- ส่วน isnull ที่ผมใช้ จะตรวจสอบแค่ว่า ข้อมูลเป็น NULL หรือไม่ โดยจะปล่อยผลลัพธ์ให้เป็นอย่างที่เป็น ไม่มีการแทนค่าใดๆ เข้าไป
isnull(dlookup()) หมายความว่า ผลการค้นได้มาเป็นค่า NULL หรือไม่ โดยคำตอบที่ได้จะมีแค่สองทาง คือ True กับ False
10 @R00977
โห..หนูอยากเก่งแบบอาจารย์ทั้งสองจังเลย อ้อ..นอกจากท่านทั้งสองนี้แล้ว ยังมีอาจารย์ สุภาพ ไชยา อาจารย์ สุชาติ ชลบุรี อาจารย์ ผึ้งน้อย และอาจารย์ akk อีก ที่หนูได้เก็บกี่ยวความรู้ไว้มากมายแบบหาซื้อที่ไหน ก็คงไม่ได้ ที่หนูใช้ Access เป็น และพอเอาตัวรอดได้ ก็เพราะบรรดาท่านเหล่านี้แหละ ขอให้ทุกท่านมีความสุขและอยู่คู่ชาว Access ตลอดไปนะคะ
ขอบคุณค่ะ
ขอบคุณค่ะ
11 @R00978
เรียนท่านอาจารย์ครับ ผมอยากได้ไฟล์ตัวอย่าง บ้างครับ เพราะผมหามานานแล้วครับ พึ่งจะเจอ รบกวนท่านอาจารย์ ส่งไฟล์ตัวอย่างให้ผมได้ไหมครับ เพื่อเป็นแนวทางที่จะฝึกและศึกษาต่อไปครับ (Piyaphan@se-ed.com)
12 @R00984
ต้องรบกวนอาจารย์ อีกแล้วละค่ะ
หนูลองแยกใช้เอาเฉพาะอันแรกก่อนคือ
if left(sq, 2) <> "A-" then
msgbox "กลุ่มรหัสไม่ถูกต้อง"
ผลคือ..มันจะแจ้งว่า "กลุ่มรหัสไม่ถูกต้อง" ตลอด แม้เราจะใส่ A เป็นตัวแรกถูกต้อง หรือ จะใส่เป็นตัวอื่นๆ เช่น B,C,D,E ก็ให้ผลแบบเดียวกัน
สำหรับอันที่สอง
if isnumeric(right(sq, 4)) then
นั้น กลับไม่มีอะไรเตือนมาเลยค่ะ ไม่ว่าจะใส่ตัวเลขครบจำนวนหรือไม่ก็ตาม
หนูจึงต้องขอรบกวนอาจารย์อีกจนได้่ค่ะ (รบกวนมาเยอะแล้ว)
หนูลองแยกใช้เอาเฉพาะอันแรกก่อนคือ
if left(sq, 2) <> "A-" then
msgbox "กลุ่มรหัสไม่ถูกต้อง"
ผลคือ..มันจะแจ้งว่า "กลุ่มรหัสไม่ถูกต้อง" ตลอด แม้เราจะใส่ A เป็นตัวแรกถูกต้อง หรือ จะใส่เป็นตัวอื่นๆ เช่น B,C,D,E ก็ให้ผลแบบเดียวกัน
สำหรับอันที่สอง
if isnumeric(right(sq, 4)) then
นั้น กลับไม่มีอะไรเตือนมาเลยค่ะ ไม่ว่าจะใส่ตัวเลขครบจำนวนหรือไม่ก็ตาม
หนูจึงต้องขอรบกวนอาจารย์อีกจนได้่ค่ะ (รบกวนมาเยอะแล้ว)
13 @R00985
ตัวอย่างที่ทำไว้ ส่งไปทางอีเมล์แล้วนะครับ
และสำหรับผู้ที่เข้ามาอ่านทีหลัง ถ้าสนใจอยากได้ตัวอย่างบ้าง ก็ตามลิงค์นี้นะครับ
(ID=accboard, PW=accgmail)
http://mail.google.com/mail/?ui=1&ik=1989ec72df&view=att&th=11da9c0bcefa49c9&attid=0.1
และสำหรับผู้ที่เข้ามาอ่านทีหลัง ถ้าสนใจอยากได้ตัวอย่างบ้าง ก็ตามลิงค์นี้นะครับ
(ID=accboard, PW=accgmail)
http://mail.google.com/mail/?ui=1&ik=1989ec72df&view=att&th=11da9c0bcefa49c9&attid=0.1
14 @R00991
ประทานโทษครับท่านอาจารย์ครับ คือ ผมได้โหลดมาลองดูแล้วครับ แต่ปัญหามันเกิดขึ้นแบบเดียวกับ คุณมาลีเลยครับ คือพอป้อนรหัสที่ซ้ำเข้าไปแล้ว มันกลับขึ้นฟ้องตรงนี้ครับ Elseif not isnull(Dlookup("em_idcard", "tbEmployee","[em_idcard] = " & tx_idcard)) then
ผมเลยงงๆ ครับ รบกวนท่านอาจารย์ อธิบายให้ผมด้วยครับ (ขอโทษครับผมลืมไป Piyaphan@Se-ed.com)
ผมเลยงงๆ ครับ รบกวนท่านอาจารย์ อธิบายให้ผมด้วยครับ (ขอโทษครับผมลืมไป Piyaphan@Se-ed.com)
15 @R00992
แก้ไขให้แล้วครับ
พอดีผมก็อปไปใส่เลย ไม่ได้แก้ตามที่เคยแจ้งไป จริงๆ ก็คือผมลืมใส่ single quote นั่นแหละครับ
ก่อนนี้
ElseIf Not IsNull(DLookup("em_idcard", "tbEmployee", "[em_idcard] = " & tx_idcard)) Then
เปลี่ยนเป็น
ElseIf Not IsNull(DLookup("em_idcard", "tbEmployee", "[em_idcard] = '" & tx_idcard & "'")) Then
พอดีผมก็อปไปใส่เลย ไม่ได้แก้ตามที่เคยแจ้งไป จริงๆ ก็คือผมลืมใส่ single quote นั่นแหละครับ
ก่อนนี้
ElseIf Not IsNull(DLookup("em_idcard", "tbEmployee", "[em_idcard] = " & tx_idcard)) Then
เปลี่ยนเป็น
ElseIf Not IsNull(DLookup("em_idcard", "tbEmployee", "[em_idcard] = '" & tx_idcard & "'")) Then
16 @R00995
ไชโย..แก้ได้แล้วค่ะอาจารย์ หนูลองปรับนู่นแก้นี่เติมนั่นเติมนี่ จากเดิมบรรทัดบน แก้ใหม่เป็นบรรทัดล่าง ในที่สุดก็ได้ตามที่ต้องการแล้วค่ะ
if left(sq, 2) <> "A-" OR not isnummeric(right(sq, 4)) then
if (Left(sq, 2)) <> "A-" OR not isnumeric(Right(sq, 4)) then
ขอขอบพระคุณอาจารย์มากๆค่ะที่กรุณาช่วยเหลือให้แนวทาง จนงานหนูสำเร็จจนได้ค่ะ
if left(sq, 2) <> "A-" OR not isnummeric(right(sq, 4)) then
if (Left(sq, 2)) <> "A-" OR not isnumeric(Right(sq, 4)) then
ขอขอบพระคุณอาจารย์มากๆค่ะที่กรุณาช่วยเหลือให้แนวทาง จนงานหนูสำเร็จจนได้ค่ะ
Time: 0.2552s
ตารางที่เก็บข้อมูลชื่อ tbEmployee
ฟิลด์ที่เก็บรหัสประจำตัวชื่อ em_idcard
-- ฟอร์ม
textboxt ที่ให้กรอกข้อมูลรหัสประจำตัว ชื่อ tx_idcard ผูกไว้กับฟิลด์ em_idcard
โค้ด เขียนไว้ในเหตุการณ์ ก่อนจะอัพเดต ของ textbox ตัวนี้แหละครับ
Private Sub tx_idcard_BeforeUpdate(Cancel As Integer)
if not isnumeric(tx_idcard) or _
len(tx_idcard)<>13 or _
not isnull(Dlookup("em_idcard", "tbEmployee","[em_idcard] = " & tx_idcard))_
then cancel = True
End Sub