

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(エクセル)
-
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
-
4
Access サブフォームでの選択行の取得
その他(データベース)
-
5
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
6
アクセスのエラー「クエリには出力フィールドが1つ以上必要です。」
その他(Microsoft Office)
-
7
access2021 強制終了してしまう
Access(アクセス)
-
8
Access で項目にブランク(スペース)を入力出来ないのですが?
Word(ワード)
-
9
Access2003 クエリで、空の列は作れますか?
Access(アクセス)
-
10
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
11
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
12
Accessにインポートしたら並び順が変わっちゃった
Access(アクセス)
-
13
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
14
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
15
2つのテーブルに共通するレコードを削除したい
Access(アクセス)
-
16
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
17
Access VBAで int型にnullを入れる方法について
Windows Vista・XP
-
18
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
19
ラベルとテキストボックスのグループ化を解除したい
Access(アクセス)
-
20
変数にnullを代入するには
Excel(エクセル)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー3086 削除クエリ...
-
ACCESS2007 フォーム 「バリア...
-
accessでSQL実行時のテーブル名...
-
Accessでクエリを完了できませ...
-
Access Update文の副問い合わせ
-
AccessのテーブルをSQL Server...
-
ODBCエラーについて
-
「マスタ」と「テーブル」の違...
-
ACCESSのSQLで、NULLかNULLでな...
-
ACCESSでのエクセルインポート...
-
列名XXXXが無効です
-
Accessにインポートしたら並び...
-
mysql IN句に1データだけ指定...
-
Access VBA Me.Requery レコー...
-
sqlserverで集計結果をUPDATEし...
-
データの二重表示の原因
-
【SQLServer】IS NULLのパフォ...
-
IFで条件を分岐させてのINSERT...
-
SQL Server のデータをCSVファ...
-
SI Object Browserのテーブルス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS2007 フォーム 「バリア...
-
Access VBA [リモートサーバー...
-
ACCESSのODBCリンクテーブルに...
-
大きなテーブルに対する問い合...
-
Accessでクエリを完了できませ...
-
実行時エラー3086 削除クエリ...
-
ユニオンクエリで繋げられるテ...
-
Select ~ into ~ で作成した...
-
VBAの実行時エラー'2522'について
-
accessでSQL実行時のテーブル名...
-
Access Update文の副問い合わせ
-
AccessのテーブルをSQL Server...
-
Oracleデータベーストリガーの...
-
SSIS 変数の値をSQL実行タスク...
-
SQL SERFVER で外部キーのエラ...
-
ACCESSにてテーブルをEXCEL形式...
-
TRY CATCHでシステムエラーを検...
-
テーブル作成後なんですが、Pri...
-
アクセスのワークシート変換に...
-
PhpMyAdminで作成して実行せよ...
おすすめ情報
ご回答頂きました皆様、
いったんアプローチを再検討してみたいと思います。
お忙しい中、ご教授頂きまして誠にありがとうございました。