Microsoft Access 掲示板

数値重複によるエラーについて

9 コメント
views
4 フォロー

大変お世話になっております。
カレンダーテーブルを作成時に使用する年の数値を、サブフォームから入力していますが、同じ年を入力した場合、実行時エラー3022が表示されます。
これを重複していることをメッセージ表示に変更したく、入力規則やVBAを試してますが上手く表示されますん。
申し訳ございませんが、よろしくお願いいたします。

Option Compare Database
Option Explicit
Private Sub datain_Click()
If IsNumeric(txtYear) = False Then
MsgBox "未入力もしくは数値以外が入力されてます。"
txtYear.SetFocus
Exit Sub
End If

If Abs(Year(Date) - txtYear) > 100 Then
MsgBox "年の指定が誤りです。"
txtYear.SetFocus
Exit Sub
End If

Dim dbs As Database
Dim rst As Recordset
Dim dtmLoop As Date

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("D_カレンダー")
With rst
For dtmLoop = CDate(Me.txtYear & "/1/1") To CDate(Me.txtYear & "/12/31")
.AddNew
!CLN_YMD = dtmLoop
!CLN_YOUBI = Format$(dtmLoop, "aaa")
!CLN_OFF = DLookup("HLD_NAME", "T_休日", "HLD_YMD=#" & dtmLoop & "#")  '追加
!CLN_Y = dtmLoop
.Update
Next dtmLoop
.Close
Me.txtYear.Value = Null
End With
MsgBox "カレンダーが作成されました。"
DoCmd.Close
End Sub
Private Sub datadel_Click()
If MsgBox("データ削除しますか?", vbYesNo + vbQuestion) = vbNo Then Exit Sub
CurrentDb.Execute "DELETE * from D_カレンダー"

MsgBox "データが削除されました。"
End Sub

zunn69
作成: 2020/05/22 (金) 13:10:33
通報 ...
1

下記でどうでしょうか。

Private Sub datain_Click()
    If IsNumeric(txtYear) = False Then
        MsgBox "未入力もしくは数値以外が入力されてます。"
        txtYear.SetFocus
        Exit Sub
    End If

    If Abs(Year(Date) - txtYear) > 100 Then
        MsgBox "年の指定が誤りです。"
        txtYear.SetFocus
        Exit Sub
    End If

    If IsNull(DLookup("CLN_YMD","D_カレンダー","CLN_YMD=#" & txtyear & "/1/1" & #)) Then
        MsgBox "既に入力済みの年です。別の年を指定してください。"
        txtYear.SetFocus
        Exit Sub
    End If

'以下略

2
zunn69 2020/05/25 (月) 09:20:31

ご回答ありがとうございます。
試したところ構文エラーが表示されます。
入力した段階で
'''sql
If IsNull(DLookup("CLN_YMD","D_カレンダー","CLN_YMD=#" & txtyear & "/1/1" & #)) Then
'''
が赤文字になります。
カレンダーテーブルに認識用に"CLN_Y"を作成して試してみましたが、エラーが表示されます。

3

あっ、すみません。コード間違ってますね。下記に修正してください。

If IsNull(DLookup("CLN_YMD", "D_カレンダー", "CLN_YMD=#" & txtyear & "/1/1#")) Then
4
zunn69 2020/05/25 (月) 09:49:12

早速の回答ありがとうございます。
今度は実行時エラー’3022’が表示されました。
デバックをすると以下の箇所が黄色で示されました。
'''sql
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("D_カレンダー")
With rst
For dtmLoop = CDate(Me.txtYear & "/1/1") To CDate(Me.txtYear & "/12/31")
.AddNew
!CLN_YMD = dtmLoop
!CLN_YOUBI = Format$(dtmLoop, "aaa")
!CLN_OFF = DLookup("HLD_NAME", "T_休日", "HLD_YMD=#" & dtmLoop & "#")  '追加
.Update
Next dtmLoop
.Close
Me.txtYear.Value = Null
End With
MsgBox "カレンダーが作成されました。"
DoCmd.Close
End Sub
'''

5

D_カレンダー テーブルの各フィールド名、データ型、主キー設定を提示してください。


'''sql
の部分ですが、単引用符(')ではなくバッククォート(`)を3つ続けるとコードブロックになります。
バッククォートは Shift + @ で入力できます。

6
zunn69 2020/05/25 (月) 13:08:45

添付しました画像の通りです。
一度既にあるデータを削除して年の値を入力すると、既に入力された数値ですと表示され、その後どの年数も受け付けなくなりました。
すみませんがよろしくお願いいたします。

Option Compare Database
Option Explicit
Private Sub datain_Click()
If IsNumeric(txtYear) = False Then
MsgBox "未入力もしくは数値以外が入力されてます。"
txtYear.SetFocus
Exit Sub
End If

If Abs(Year(Date) - txtYear) > 100 Then
MsgBox "年の指定が誤りです。"
txtYear.SetFocus
Exit Sub
End If

If IsNull(DLookup("CLN_YMD", "D_カレンダー", "CLN_YMD=#" & txtYear & "/1/1#")) Then
        MsgBox "既に入力済みの年です。別の年を指定してください。"
        txtYear.SetFocus
        Exit Sub
    End If

Dim dbs As Database
Dim rst As Recordset
Dim dtmLoop As Date

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("D_カレンダー")
With rst
For dtmLoop = CDate(Me.txtYear & "/1/1") To CDate(Me.txtYear & "/12/31")
.AddNew
!CLN_YMD = dtmLoop
!CLN_YOUBI = Format$(dtmLoop, "aaa")
!CLN_OFF = DLookup("HLD_NAME", "T_休日", "HLD_YMD=#" & dtmLoop & "#")  '追加
!CLN_Y = dtmLoop
.Update
Next dtmLoop
.Close
Me.txtYear.Value = Null
End With
MsgBox "カレンダーが作成されました。"
DoCmd.Close
End Sub
Private Sub datadel_Click()
If MsgBox("データ削除しますか?", vbYesNo + vbQuestion) = vbNo Then Exit Sub
CurrentDb.Execute "DELETE * from D_カレンダー"

MsgBox "データが削除されました。"
End Sub

7
zunn69 2020/05/25 (月) 13:09:38

画像1

8

最初の回答のコードが間違ってました。下記に修正してください。(Notが不足していた。)

'前略

    If Not IsNull(DLookup("CLN_YMD","D_カレンダー","CLN_YMD=#" & txtyear & "/1/1" & #)) Then
        MsgBox "既に入力済みの年です。別の年を指定してください。"
        txtYear.SetFocus
        Exit Sub
    End If

'後略
9
zunn69 2020/05/25 (月) 15:36:25

無事できました。
ありがとうございました。