Private Sub 依頼表No1_BeforeUpdate(Cancel As Integer)
Dim ErrFLG As Boolean
Dim nCHKNO As Long
Dim strKUBUN As String
strKUBUN = Left(Me![依頼表No1], 1) 'チェックする頭文字の代入
nCHKNO = Val(Mid(Me![依頼表No1], 3)) '番号を変換
ErrFLG = False 'フラグにFalseを初期代入
'頭文字のチェック
If strKUBUN <> "A" And strKUBUN <> "X" And strKUBUN <> "Z" Then
ErrFLG = True 'ERRをONにする
End If
'コード範囲のチェック
If nCHKNO < 100 Or 999 < nCHKNO Then '100より下、999より上か?
ErrFLG = True 'ERRをONにする
End If
'エラーの判断
If ErrFLG = True Then
MsgBox "データはA-201,X-777,Z-234などの形式で入力してね", vbExclamation, "エラー"
Cancel = True
End If
End Sub
Private Sub 依頼表No1_BeforeUpdate(Cancel As Integer)
Dim nCHKNO As Long
Dim strKUBUN As String
strKUBUN = Left(Me![依頼表No1], 1) 'チェックする頭文字の代入
nCHKNO = Val(Mid(Me![依頼表No1], 3)) '番号を変換
'頭文字のチェック
If strKUBUN <> "A" And strKUBUN <> "X" And strKUBUN <> "Z" Then
Me![依頼表No1].SelStart = 0 '先頭から
Me![依頼表No1].SelLength = 1 '間違いは頭文字なので
MsgBox "頭文字はA,X,Z です", vbExclamation, "頭文字エラー"
Cancel = True 'キャンセルをセットして
Exit Sub '関数を途中で抜ける
End If
'コード範囲のチェック
If nCHKNO < 100 Or 999 < nCHKNO Then '100より下、999より上か?
Me![依頼表No1].SelStart = 2 '数値のエリア開始位置
Me![依頼表No1].SelLength = 99 '文字数をオーバーしてセットしてみたら?
MsgBox "コードは100〜999までです", vbExclamation, "コード範囲エラー"
Cancel = True 'キャンセルをセットして
Exit Sub '関数を途中で抜ける
End If
End Sub
頭文字のチェックでは
If strKUBUN <> "A" And strKUBUN <> "X" And strKUBUN <> "Z" Then
Me![依頼表No1].SelStart = 0 '先頭から
Me![依頼表No1].SelLength = 1 '間違いは頭文字なので
と1文字目を選択させてから
MsgBox "頭文字はA,X,Z です", vbExclamation, "頭文字エラー"
メッセージ表示
Cancel = True 'キャンセルをセットして
Exit Sub '関数を途中で抜ける
処理のキャンセルをセットしてから関数を抜けてます
End If
コード範囲のチェックでは、
If nCHKNO < 100 Or 999 < nCHKNO Then '100より下、999より上か?
Me![依頼表No1].SelStart = 2 '数値のエリア開始位置
Me![依頼表No1].SelLength = 99 '文字数をオーバーしてセットしてみたら?
とコードの入力開始位置2(012の3文字目)から、
オヤ?99文字指定?これでも動くんだぁ。
※正確な文字数じゃなくても大丈夫でした
MsgBox "コードは100〜999までです", vbExclamation, "コード範囲エラー"
Cancel = True 'キャンセルをセットして
Exit Sub '関数を途中で抜ける
処理のキャンセルをセットしてから関数を抜けてます
End If
いろいろとみなさんも遊んでみてください。