

ACCESS2007 フォーム 「バリアント型でない変数にNull値を代入しようとしました」エラーの回避策について
Access2007でデータシート型のフォームを作成し、SQLテーブルの情報をメンテできるようにしようとしています。
システム構築ではなく、できるだけライトな運用ということでこのパターンとしました。
ただ、その中でもできる限り利便性は上げたいと思い、各種の入力制御を設けていますが、
一点、ある項目にいったん格納されたデータを削除しようとした場合、「バリアント型でない変数にNull値を代入しようとしました」のエラーがでてしまう点がどうしても解決できません。
「””」を入力することで消すしかない状況です。
NULLを入力した場合に自動で「””」に変換しデータ格納できるような方法を探しています。
※なお、今回、SQLテーブルの設定は変更することはできない、というのが前提になっています。
Webで色々を調査していますが、下記のようなソース(NULLの場合、自動で別な文字列に置換える)もあり試してみましたが、
そもそも データを格納できてはじめて NULLかどうかの判断が可能になると思われ、
今回のようにテーブルの設定を変えられない状況ではデータ格納前にはじかれているので使用できないように思いました。
Private Sub AAA_AfterUpdate()
If IsNull(AAA) Then
AAA = ""
End If
End Sub
なにとぞアドバイスをお願いいたします・・・・・・。
No.3ベストアンサー
- 回答日時:
Private Sub AAA_AfterUpdateは、データ更新後にチェックするイベントですので、チェックの前の更新でエラーになってしまいます。
AfterUpdateの代わりに、BeforeUpdateのイベントでチェックするようにしてはいかがでしょう?
そうすれば、更新の前にチェックが動作し、Nullを""に置き換えてくれると思います。
ご参考まで。
ありがとうございます。
BeforeUpdate は知りませんでした。
早速試してみました。以下の状況です。
①格納済みのデータを削除しようとした場合
やはり「バリアント型でない変数にNull値を代入しようとしました」エラー が出ました・・・
②データを新規に入力しようとした場合
(1)データを新規に入力した時点で、このメッセージが出る。
>「イベント プロパティに指定した式 更新前処理 でエラーが発生しました。プロシージャの宣言が、イベントまたはプロシージャの定義と一致していません。」
>*マクロ名、ユーザー定義関数名、[イベント プロシージャ]以外の式が指定されています。
>*関数、イベント、マクロの評価でエラーが発生しました。
(2)「OK」を押すと、このエラーが出る。
>値がフィールドまたはレコードの入力規則に違反しています。
(3)結果的に、新規にデータを入力できない状態になっています。
すみませんが、よろしくお願いします。
No.7
- 回答日時:
> ただ、その中でもできる限り利便性は上げたいと思い、各種の入力制御を設けていますが
というのが気になりますね。どのように制限を付けているのですか?
AAAの元の項目の型と、このレコードのキー項目の型を教えてください。
またデータシートビューのこれらの項目のプロパティは既定値から変更していますか?
そして前回の回答でも書かせていただきましたが、すべてのイベントプロシージャのない状態で、つまりまっさらなフォームで、データ削除→nullで更新かける処理をやってみてください。それでも同じようにエラーが出る場合は、更新手続きの問題ではなさそうです。
ご参考まで。
制限ですが、単に IME入力モード をオフまたは使用不可にしている程度になります。
なお、先程の結果は、その影響を除外してみるため、まっさらなフォームで新規作成したもので試した結果になります・・・・
ということはおっしゃるように「それでも同じようにエラーが出る場合は、更新手続きの問題ではなさそうです。」ということなんですね・・・・
また、先程の 「イベント実行前にエラーが発生してしまっている」 ということもわかったため、いったんアプローチを再検討してみたいと思います。
お忙しい中、ご教授頂きまして誠にありがとうございました。
大変勉強になりました。

No.6
- 回答日時:
ステップ実行の仕方:
モジュールのすべてのイベントの先頭でF9キーを押すと、左端に●が出て行が茶色になります。
その状態で、問題の処理を実行すると、実行しようとする行が黄色になります。
そこで、F8キーを押すと、1ステップずつ実行されます。
String型または数値型変数に値を入れている所でエラーになると思います。
問題の無かったイベントは、再びF9キーを押して茶色を消しましょう。
ありがとうございます。やってみて理解出来ました。ただ残念ながら現状わかったことで、データ削除→nullで更新かけた場合、イベントの実行よりも前にエラーが出ているようなのです。
No.5
- 回答日時:
エディタでただ AAA_ の箇所を form_ に置き換えただけではありませんか?
デザインビューの左上の四角の所をクリックしてフォームが選択された状態にしてから、更新前処理のイベントを新たに追加してください。
①の方、すべてのイベントサブルーチンを削除してもエラーになりますか?
ありがとうございます。
早速やってみました。(なお新たに まっさらなフォームを再作成しました)
①まだ出る
②(1)(2) とも 出なくなった
という状況でした。
★このイベントの動作状況を確認するため、イベントの各部分にMSGBOXを置いてみました。
―――――――――――――
Private Sub Form_BeforeUpdate(Cancel As Integer)
MsgBox ("★START")
If IsNull(AAA) Then
MsgBox ("★null")
AAA = ""
Else
MsgBox ("★not null")
End If
End Sub
―――――――――――――
★この結果わかったこと:
・通常の問題ない入力の場合は正しく動作している。(MSGBOX:「★START」⇒「★not null」と表示される)
・NULL入力の場合は、MSGBOXは表示されず、「「バリアント型でない変数にNull値を代入しようとしました」のエラーがでる。
ということで、イベント実行前にエラーが発生してしまっているようでした・・・
こうなると BeforeUpdateでは制御できないということでしょうか・・・
No.4
- 回答日時:
AAA_BeforeUpdateではなく、Form_BeforeUpdateに
If IsNull(AAA) Then AAA = "" End If
を書いたらうまくいきませんでしょうか?
項目の変更時ではなく、レコードの変更時のチェックという意味です。
ありがとうございます。
対象項目「AAA」に、下記 で設定してみました。(対応これで良かったでしょうか?)
先の ①、 ②(1)のエラーはまだ出ました。 ②(2)はでなくなりました。
Private Sub form_BeforeUpdate()
If IsNull(AAA) Then
AAA = ""
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) vbaについて 主に以下のような設定をしたいです。 Aブックの表の行数が20未満だったら Bブックの 1 2023/06/08 23:40
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
このQ&Aを見た人はこんなQ&Aも見ています
-
「バリアント型でない変数に Null 値を代入しようとしました」と、ならないようにしたい
Excel(エクセル)
-
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
-
4
Access サブフォームでの選択行の取得
その他(データベース)
-
5
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
6
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
7
2つのテーブルに共通するレコードを削除したい
Access(アクセス)
-
8
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
9
Access で項目にブランク(スペース)を入力出来ないのですが?
Word(ワード)
-
10
変数にnullを代入するには
Excel(エクセル)
-
11
access2021 強制終了してしまう
Access(アクセス)
-
12
Access VBAで int型にnullを入れる方法について
Windows Vista・XP
-
13
クエリで出来た表にチェックボックスを追加する
その他(Microsoft Office)
-
14
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
15
アクセスで追加した項目に全て同じ値を一発で入れたい
Access(アクセス)
-
16
Nullの使い方が不正です。
Visual Basic(VBA)
-
17
Access VBAでタブコントロールで選択するタブをしていするには。
Access(アクセス)
-
18
アクセスのエラー「クエリには出力フィールドが1つ以上必要です。」
その他(Microsoft Office)
-
19
角丸四角形を描きたい
Excel(エクセル)
-
20
ACCESSのフォームで次のレコードに移動しない方法を教えてください
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS2007 フォーム 「バリア...
-
VBAの実行時エラー'2522'について
-
ユニオンクエリで繋げられるテ...
-
Access VBA [リモートサーバー...
-
ACCESSのODBCリンクテーブルに...
-
accessでSQL実行時のテーブル名...
-
SSIS 変数の値をSQL実行タスク...
-
大きなテーブルに対する問い合...
-
テーブル作成後なんですが、Pri...
-
アクセスのワークシート変換に...
-
実行時エラー3086 削除クエリ...
-
「マスタ」と「テーブル」の違...
-
accessテーブル作成クエリを実...
-
3つ以上のテーブルをUNIONする...
-
クエリのキャンセルがいつにな...
-
Accessにインポートしたら並び...
-
accessのロック
-
行方向のデータを横に並べる
-
SELECT時の行ロックの必要性に...
-
Insert Into Select での重複に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS2007 フォーム 「バリア...
-
Access VBA [リモートサーバー...
-
Accessでクエリを完了できませ...
-
ACCESSのODBCリンクテーブルに...
-
実行時エラー3086 削除クエリ...
-
ユニオンクエリで繋げられるテ...
-
Select ~ into ~ で作成した...
-
VBAの実行時エラー'2522'について
-
accessでSQL実行時のテーブル名...
-
Oracleデータベーストリガーの...
-
大きなテーブルに対する問い合...
-
ACCESSにてテーブルをEXCEL形式...
-
Access Update文の副問い合わせ
-
SQL Serverのテーブルってどう...
-
AccessのテーブルをSQL Server...
-
勤続年数の求め方
-
SSIS 変数の値をSQL実行タスク...
-
Access VBA 読み取り専用かチェ...
-
ジョブでvbsを起動する方法
-
SQL SERFVER で外部キーのエラ...
おすすめ情報
ご回答頂きました皆様、
いったんアプローチを再検討してみたいと思います。
お忙しい中、ご教授頂きまして誠にありがとうございました。