次の方法で共有

一度テキストボックスに入力した値を変更しようとすると確認のメッセージを表示

Anonymous
2018-12-11T03:44:06+00:00

いつもお世話になっております。

テキストボックス[日付]の値を変更しようとすると

メッセージボックスで確認のメッセージを出したいのですが

上手くできておりません。日付を入力しようとすると

エラーになってしうのと、既に入力がある日付をNullにしてもエラーとなります。

エラーメッセージは 実行時エラー94 Nullの使い方が不正です。

間違っている部分をご教示頂けますでしょうか。

<行いたい動作>

・テキストボックス[日付]が

 空欄の場合→何もしない

 既に入力されている値を変更しようとすると

 メッセージ「日付を変更しますか?」と確認

 「はい」の場合→メッセージ「変更しました!」

 「いいえ」の場合→メッセージ「変更を中止します!」

  変更前の値に戻す。

下記が現在のコードです。テキストボックス[日付]の更新前処理に記述しております。

Private Sub 日付_BeforeUpdate(Cancel As Integer)

Dim rc As VbMsgBoxResult

Dim dathizuke As Date

'変数を宣言

'On Error Resume Next

'日付を削除するとエラーになるので回避

rc = MsgBox("日付を変更しますか?", vbYesNo + vbQuestion)

'変数rcにMsgBox YesNo型を代入

dathizuke = Me!日付.Value <> Me!日付.OldValue

'変数dathizukeに変更前、変更後の日付を比較を代入

If dathizuke = True Then

'もしも[日付]が以前の日付と異なるならば

If rc = vbYes Then

'もしもYesの場合

    MsgBox "変更しました!", vbInformation

ElseIf rc = vbNo Then

'もしもNoの場合

        MsgBox "変更を中止します!", vbCritical

        Me.Undo

End If

End If

End Sub

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2018-12-11T04:22:36+00:00

> Dim dathizuke As Date

Dim dathizuke As Boolean

> dathizuke = Me!日付.Value <> Me!日付.OldValue

dathizuke = Nz(Me!日付.Value, "") <> Nz(Me!日付.OldValue, "")

> MsgBox "変更を中止します!", vbCritical

> Me.Undo

MsgBox "変更を中止します!", vbCritical

Cancel = True

Me**!日付**.Undo

> エラーメッセージは 実行時エラー94 Nullの使い方が不正です。

・<> などの演算子を用いた比較演算における

 左辺または右辺の値が Null である場合、

 その演算結果は True でもなく False でもなく Null である。

・Date 型の変数に Null を代入することは出来ない。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

1 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2018-12-11T06:30:31+00:00

    sk.exe 様

    いつもどうもありがとうございます。

    > エラーメッセージは 実行時エラー94 Nullの使い方が不正です。

    を検索した時は、意味がわからなかったのですが、

    教えて頂いたNz関数を調べてみたら、少し理解ができました。

    <>演算子をしているため、現在or過去がNullになると

    エラーになってしまっていたのですね。

    sk.exe 様はエラーにならないように

    Nz関数を使用して、Nullの代替値を返しているから

    データを空にしてもエラーにならないのですね。

    >・Date 型の変数に Null を代入することは出来ない。

    そうだったのですね。だからこの場合にTrueかFalseで判別するから

    データ型はBoolean を使用するのですね。

    >Cancel = True

    >Me!日付.Undo

    そうですね。私、ここも間違っておりました。

    色々とご教示頂き、どうもありがとうございます。

    始めたばかりでつまづきそうですが、めげずに頑張りたいと思います。

    下記に変更したところ、ちゃんと動作致しました。

    Private Sub 日付_BeforeUpdate(Cancel As Integer)

    Dim rc As VbMsgBoxResult

    Dim dathizuke As Boolean

    '変数を宣言

    rc = MsgBox("日付を変更しますか?", vbYesNo + vbQuestion)

    '変数rcにMsgBox YesNo型を代入

    dathizuke = Nz(Me!日付.Value, "") <> Nz(Me!日付.OldValue, "")

    '変数dathizukeに変更前、変更後の日付を比較を代入、Nz関数でNullの代替値を返す

    If dathizuke = True Then

    'もしも[日付]が以前の日付と異なるならば

    If rc = vbYes Then

    'もしもYesの場合

    MsgBox "変更しました!", vbInformation

    ElseIf rc = vbNo Then

    'もしもNoの場合

    MsgBox "変更を中止します!", vbCritical

    Cancel = True

    Me!日付.Undo '元に戻す

    End If

    End If

    End Sub

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません