|
早速のご回答ありがとうございます
>ところで、このコードですが、「strNewData2 = vbNullString」という式が成り>立つ限り、
>While...Wend間がループされるというものです。・・・
ここは氏名フィールドに値が入っていない場合と認識していました。なので、値が入っていないのは今登録しようとしているレコードのみなのでそれでいいのかな?と思っていました。
で、入力されないままだとここは入力必須だよと入力を促して、入力されないままなら強制的に終わらせるということでした。
>次に、vbNullStringという定数です・・・
>「strNewData = Null」という条件式が成り立つことはあり得ません。
> なので、「While (strNewData = Null)」から「Wend」までのコードが実行され>ることも
>絶対にありません。
> まず、Nullであるかどうかは、「=」では調べられません。IsNull関数を使いま>す。
> 次に、strNewDataは、長整数型の変数ですから、Nullを格納できません。
> なので、「strNewData = Null」という条件式が成り立つことは絶対にありませ>ん。
自分自身空欄というものにはいつも悩まされています、Nullは長整数型のフィールドには格納できないのですね。
ご指摘の件を見直しまして下記のように書き換えたらうまくいきました。
Private Sub 氏名_NotInList(NewData As String, Response As Integer)
Dim strNewData As String
Dim strMessage As String
Dim strNewData2 As String
While (strNewData = vbNullString)
strNewData = InputBox("管理IDを入力してください。")
If (strNewData = vbNullString) Then
strMessage = "管理IDは必須です。" & vbCrLf _
& "新しいデータの登録を中止しますか?"
GoSub StopOrContinue
ElseIf DCount("*", "社員名簿", "管理ID=" & strNewData) Then
strNewData = vbNullString
strMessage = "同じ管理IDが登録済みです。" & vbCrLf _
& "新しいデータの登録を中止しますか?"
GoSub StopOrContinue
End If
Wend
While (strNewData2 = vbNullString)
strNewData2 = InputBox("社員コードを入力してください。")
If (strNewData2 = vbNullString) Then
strMessage = "社員コードは必須です。" & vbCrLf _
& "新しいデータの登録を中止しますか?"
GoSub StopOrContinue
ElseIf DCount("*", "社員名簿", "社員コード= '" & strNewData2 & "'") Then
strNewData2 = vbNullString
strMessage = "同じ社員コードが登録済みです。" & vbCrLf _
& "新しいデータの登録を中止しますか?"
GoSub StopOrContinue
End If
Wend
CurrentDb.Execute _
"INSERT INTO 社員名簿 ( 管理ID, 社員コード, 社員名 )" _
& " VALUES ('" & strNewData & "', '" & strNewData2 & "', '" & NewData & "');"
Response = acDataErrAdded
ExitProcedure:
Exit Sub
StopOrContinue:
If (vbYes = MsgBox(strMessage, vbYesNo + vbQuestion)) Then
Response = acDataErrContinue
Exit Sub
End If
Return
End Sub
ただ、動いているというだけでおかしなコードかもしれませんが、取りあえずご報告させていただきます。
|
|