

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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
「バリアント型でない変数に Null 値を代入しようとしました」と、ならないようにしたい
Excel(エクセル)
-
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
-
4
Access サブフォームでの選択行の取得
その他(データベース)
-
5
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
6
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
7
Access で項目にブランク(スペース)を入力出来ないのですが?
Word(ワード)
-
8
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
9
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
10
access2021 強制終了してしまう
Access(アクセス)
-
11
Access VBAで int型にnullを入れる方法について
Windows Vista・XP
-
12
2つのテーブルに共通するレコードを削除したい
Access(アクセス)
-
13
Access VBAでタブコントロールで選択するタブをしていするには。
Access(アクセス)
-
14
変数にnullを代入するには
Excel(エクセル)
-
15
Accessにインポートしたら並び順が変わっちゃった
Access(アクセス)
-
16
【アクセス】クエリで、行と列を入れ替えるには?【access】
Access(アクセス)
-
17
アクセスで追加した項目に全て同じ値を一発で入れたい
Access(アクセス)
-
18
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
19
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
20
クエリで出来た表にチェックボックスを追加する
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access VBA [リモートサーバー...
-
Accessでクエリを完了できませ...
-
Select ~ into ~ で作成した...
-
ACCESSのODBCリンクテーブルに...
-
テーブル作成後なんですが、Pri...
-
実行時エラー3086 削除クエリ...
-
ACCESS2007 フォーム 「バリア...
-
VBAの実行時エラー'2522'について
-
Oracleデータベーストリガーの...
-
SQL Serverのテーブルってどう...
-
大きなテーブルに対する問い合...
-
ユニオンクエリで繋げられるテ...
-
勤続年数の求め方
-
アクセスのワークシート変換に...
-
Access Update文の副問い合わせ
-
AccessのテーブルをSQL Server...
-
結合テーブルクエリPrimaryKey...
-
「マスタ」と「テーブル」の違...
-
SQL Server のデータをCSVファ...
-
accessのエクスポートエラーに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS2007 フォーム 「バリア...
-
Access VBA [リモートサーバー...
-
Accessでクエリを完了できませ...
-
ACCESSのODBCリンクテーブルに...
-
大きなテーブルに対する問い合...
-
VBAの実行時エラー'2522'について
-
テーブル作成後なんですが、Pri...
-
accessでSQL実行時のテーブル名...
-
実行時エラー3086 削除クエリ...
-
Select ~ into ~ で作成した...
-
アクセスのワークシート変換に...
-
ユニオンクエリで繋げられるテ...
-
インデックスを調べる方法は?
-
AccessのテーブルをSQL Server...
-
PhpMyAdminで作成して実行せよ...
-
Access Update文の副問い合わせ
-
TRY CATCHでシステムエラーを検...
-
Access VBA 読み取り専用かチェ...
-
SQL Serverのテーブルってどう...
-
SSIS 変数の値をSQL実行タスク...
おすすめ情報
ご回答頂きました皆様、
いったんアプローチを再検討してみたいと思います。
お忙しい中、ご教授頂きまして誠にありがとうございました。