• 締切済み

「バリアント型でない変数に Null 値を代入しようとしました」と、ならないようにしたい

access フォームのテキストボックスにID(数字)を手入力し、 テーブルから情報を引き出すというのを作っています。 問題は、一度入力した数字を消した後(バックスペースキーやデリートキーや切り取り)、エンターキーを押すと 「バリアント型でない変数に Null 値を代入しようとしました」 と表示されてしまう点です。 業務上支障はありませんが、この表示を無くしたいのです。 このIDは常に5桁である必要がある為、 フォーム上では定型入力を”99999”としております。 テーブル上ではテキスト型としております。 どのようにすれば、解決できるでしょうか。

みんなの回答

noname#22222
noname#22222
回答No.4

3、そもそもエラーが発生する代入をスキップする。 Private Sub ID_AfterUpdate()   Dim lngID As Long      If Len(Me.ID & "") > 0 Then     lngID = Me.ID     MsgBox lngID   End If End Sub

noname#22222
noname#22222
回答No.3

1、単にエラーを表示させない。 2、変数代入時にエラーを発生させない。 Private Sub ID_AfterUpdate() On Error Resume Next   Dim lngID As Long      lngID = Me.ID   MsgBox lngID End Sub Private Sub ID_AfterUpdate()   Dim lngID As Long      lngID = Nz(Me.ID, 0)   If lngID <> 0 Then     MsgBox lngID   End If End Sub

PearlJam69
質問者

補足

皆様ご回答ありがとうございます。この場を借りて申し上げます。 しかし解決できませんでした。 皆さんがおっしゃるNz関数、If文は試しました。 しかし、それらのステートメントに至る前にエラーになっているようです。On Error Resume Nextに至る前のエラーのようです。 プロパティ→データ→既定値 で、既定値を”0”とすると例のエラー表示は無くなりましたが、 (当然ですが)IDを入力するテキストボックスはデフォルトで”0”が表示されます。 5桁での数字入力が必須の為、定型入力を”99999”とした所に起因しているように感じるのですが、どうにか解決できないでしょうか。

  • laputart
  • ベストアンサー率34% (288/843)
回答No.2

同じ状況をテストしました。 詳しい設定が分らないのですが、次のコードでは解決しませんか? フォームの上でテキストボックス名を仮に TX1 とすると フォーム→デザインで開く そのテキストボックスのプロパティを開く イベント→更新後処理をクリックして(イベントプロシージャ)にする その右横のボックスをクリック ----------------------------- Private Sub TX1_AfterUpdate() End Sub ----------------------------- と表示されるとおもうので、その間にエラー処理のコードを書きます ----------------------------- Private Sub TX1_AfterUpdate() If IsNull(TX1) Then TX1 = "99999" End If End Sub ----------------------------- この設定ではテキストが空になったとき、無理やり99999にすると いう処理ですが、他にも方法はあります。 保存して閉じてフォームを実行すると NULLになった時エラーメッセージが回避されていると思いますが? もし違っていたら教えてください。 それと大きなプログラムの場合、設定がよけい悪くなると行けないので データベースのコピーを使って試してみてください

PearlJam69
質問者

補足

皆様ご回答ありがとうございます。この場を借りて申し上げます。 しかし解決できませんでした。 皆さんがおっしゃるNz関数、If文は試しました。 しかし、それらのステートメントに至る前にエラーになっているようです。 プロパティ→データ→既定値 で、既定値を”0”とすると例のエラー表示は無くなりましたが、 (当然ですが)IDを入力するテキストボックスはデフォルトで”0”が表示されます。 5桁での数字入力が必須の為、定型入力を”99999”とした所に起因しているように感じるのですが、どうにか解決できないでしょうか。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

> テーブルから情報を引き出すというのを作っています ここをどの様に作っているのか説明が無いと・・・ Nz 関数で括って、Nz(テイストボックス名," ") などとすれば良いかも?

関連するQ&A

  • ACCESSの値の代入に関して

    ACCESS2000を使用しています。 あるテキストコントロールに8桁のコードを入力します。 入力後、更新後のアクションで隣にあるコントロールに=left(8桁のコントロール,4)の 値を代入する仕組みを作成したのですが、この8桁に数字と文字(アルファベット)が 混在することがあり、数字のみの場合はなんなく代入できるのですが、文字が混在する 場合、エラーとなってしまいます。 代入するコントロールのデータ型は勿論テキスト型にしております。 このエラーの対処方をご存知の方がいらっしゃいましたらご教授お願いします。

  • Access2000でTextBox変数の代入

    Access2000でTextBox変数を作成し、条件に応じて フォーム上に配置した2つのテキストボックスをその変数に代入したいのですが、うまくいきません。 Public tBox as TextBox If i = 1 Then Set tBox = テキスト1 ElseIf i = 2 Then Set tBox = テキスト2 End if ※ テキスト1、テキスト2はフォーム上に配置した テキストボックスの名称 このコードを実行すると、テキスト1は テキスト1.Textと解釈され、Textプロパティに何も設定 されていない場合、tBoxにはNULLが代入されます。 Textプロパティの値ではなく、テキストボックスオブジェクトそのものを変数に代入するにはどうすればよいのでしょうか。 ご教授お願いします。 環境は OS:Windows2000 Professional   Access2000 です。

  • Access97で、“分:秒”という形式で入力・保存する方法

    Access97で、あるテーブルに時間のフィールドを作りました。 このテーブルをもとにフォームを作成しました。 ここで、このフォームの、あるテキストボックスのコントロールソースを時間フィールドに設定し、書式を“nn\;ss”に設定し、定型入力で“##:##;0;*”としました。 このフォームのテキストボックスにカーソルをあてると“**:**”となり、4つの数字を入力できるのですが、この4つの数字を分秒では認識せず、時分としてしか認識しないようです。 どうすれば4桁の数字を入力し、“分:秒”という形式で表示・保存できるのでしょうか。 宜しくお願いします。

  • このオブジェクトに値を代入することはできません

    Accessファイルを共有フォルダに入れ、複数のPCより使用しています。 (よくないのはわかっているのですが…) 「予定入力フォーム」というフォームよりデータを入力し、 次に「結果入力フォームから、予定入力したデータを引っ張りだしてきて、結果を入力しています。 テーブルは「マスタテーブル」ひとつです。 「結果入力フォーム」には「作成年月日」というテキストボックスがあり、「 結果入力フォーム」を読み込んだ時の処理に If IsNull(Me.作成年月日)=True Then  Me.作成年月日=Date Else End If という式を書き、 とりあえず「結果入力フォーム」を開いたときに今日の日付が自動で入るようにしています。 (Nullであった場合のみ自動で入るようにしています。 2回目以降に「結果入力フォーム」を開いたときは、前回開いたときの日付のままになるように。) ここで少し不具合が起きまして、1人でアクセスしている場合はよいのですが、 2人以上で「結果入力フォーム」にアクセスすると以下の様なエラーになります。 実行時エラー このオブジェクトに値を代入することはできません。 Me.作成年月日=Date の記述の部分が黄色くエラーになります。 違うレコードを引っ張っていてもなります。 テーブルの作成年月日のフィールドにすでにデータが入っている場合は、 2人以上でアクセスしても問題なく動作し、 その他の項目も普通に入力でき、テーブルへの更新も問題ないようです。 Me.作成年月日=Date ここがよくないのでしょうか? 2人以上でアクセスすると必ずこうなる、というわけでもないようで…。 1人が長い間、「結果入力フォーム」を開いた状態で放置していた場合、 次に別PCで結果入力フォームを開くとエラーになるような気がします。 テーブルを触ろうとすると、ロックされています、みたいな感じです。 そもそもAccessは共有に適していない、というお叱りはごもっともなのですが、 回避する記述等、方法があればお願い致します

  • サブフォームをブランクで開きたい(値の代入)

    現在、サブフォームを開く時に値の代入の後、DMax関数で+1をして最後のレコードに+1したIDをマクロで行っていますが、VBAでできないでしょうか? 1.サブフォームを開く Cmd Open フォーム名 2.値の代入で(””)をいれフォームをクリア 3.値の代入でID=DMax"テーブル”+1 良い知恵があれば教えて頂けないでしょうか マクロにあまり頼りたくないので宜しくお願い致します。

  • Access-VBAのPublic変数について =基本的な事です=

    フォームAのテキストボックスに入力された値をフォームBで使用したいのですが、調べるとPublic変数に値を代入しておけばフォームAを閉じても値を保持できるとの事でした。 そこで、 (1) 標準モジュール(My_Moduleという名前)を作成しそこに1行Public Hensu as Long と定義しました。 (2) フォームAにボタンを作成し、そのクリックイベントに、 Hensu=Text1.Value というコードを記述しました。 (3) フォームBにボタンを作成し、そのクリックイベントに、 Text1.Value=Hensu というコードを記述しました。 フォームBのボタンをクリックすると、Text1に値が代入されるかと思いましたが、意に反しHensuの中身はNullでした。 どのようにすればフォームBで変数の値を取得することが出来るのでしょうか? ちなみにフォームAからPublic Hensuには値が代入されているようで、イミディトウインドウで?Hensuとするとちゃんと代入された値が表示されます。

  • 2次配列について Null値?

    例えば、あるセル範囲(ここではA1:B3としておきます)に [ 1 ] [ 4 ] [ 2 ] [ 5 ] [ 3 ] [ ] というように数値が入力されているとします。 RefEdit1つと[実行]ボタン1つ、[キャンセル]ボタン1という簡単なユーザーフォームを作成して以下のようなコードを書きます。 ' 実行ボタンに登録したコード Private Sub CommandButton1_Click() Dim myRange As String Dim dat As Variant myRange = RefEdit1.Text dat = Range(myRange) '選択したセル範囲のデータをdatに代入 Unload UserForm1 'ユーザーフォームの終了 End Sub ' キャンセルボタンに登録したコード Private Sub CommandButton2_Click() Unload UserForm1 'ユーザーフォームの終了 End Sub それで質問なのですが、この場合、dat(3,2)には何が入っていることになっているのでしょうか。Null値なるものが代入されているのでしょうか、、、 最終的にデータ行列において、各列のデータ数を取得したいのですがどうすればよいでしょうか。1列目=3、2列目=2といったように。 もしNull値?が代入されていることになっており、2次配列においてNull値を判断する関数でもあればそれをカウントして、列数-Nullの数で取得できるだろうと考えてはいるのですが。

  • 文字列の入っているString値、何も入力されていないString値、Null値の全てを表示されるには?

    access2003です。 フォーム1とクエリ1とテーブル1があります。 クエリ1の「テーブル1の番号フィールド」の抽出条件に 「Like "*" & [Forms]![フォーム1]![番号テキスト] & "*"」と入力しています。 フォーム1の番号テキストに「1」を入力しコマンドホ゛タンを押すと 「1」を含むレコードを表示され フォーム1の番号テキストに「*」を入力しコマンドホ゛タンを押すと 何かしらの文字列が入力されているレコート゛が表示されます。 しかし テーブル1番号フィールドには、 Null値と何も入力されていないString値(""←が入っている)も含まれています。 (見た目は空白どちらも空白です) (String値がある理由はADOを使って何も入力されてない値もまとめてレコードに追加している為) ここで質問なのですが フォーム1のコマンドホ゛タンを押したときに 文字列の入っているString値、何も入力されていないString値、Null値の全てを表示されるには どうすればいいのでしょうか? よろしくお願い致します。

  • _variant_t型のNULLチェック

    ADOでAccess2000のテーブルを読み込もうとしていますが、空のフィールドを読み込んだときにエラーになります。 FieldPtr pfName; _variant_t vName; CString strwk;  :  : pfName = pRs->Fields->GetItem("名前"); vName.Clear(); vName = pfName->Value; strwk = vName.bstrVal; 名前が空の場合、このstrwkをリストビューに表示させようとするとエラーになります。 ウォッチウィンドウで見ると{VT_NULL}と表示されますが、 if (vName == VT_NULL) とすると、コンパイルで、「あいまいです」とエラーになります。 フィールドが空かどうかの判断の方法を教えてください。

  • 複数テーブルSELECT*、NULLのカラムに別の値が代入されて出力される

    複数テーブルSELECT*、NULLのカラムに別の値が代入されて出力される こんにちは。 MySQLの経験が未ださほどないので、単純なミスかも知れませんが 少しアドバイスをお願いします。 複数テーブルに対してSELECT *を行うと、 本来NULLになるべきカラムに別の値が入った状態で出力されます。 *同一データベース内です [Table_A]    tel      name    links        regtime 000000000  サンプルA  okwave.jpA   1246247993 000000001  サンプルB  okwave.jpB   1246248003 000000002  サンプルC  okwave.jpC   1246249258 [Table_B]   subject      name    body            password サンプル書き込み1  サンプルD  サンプル1。ここが本文... 22521343 サンプル書き込み2  サンプルE  サンプル2。ここが本文... 4654387368 サンプル書き込み3  サンプルF  サンプル3。ここが本文... 13213843843 [Database] tel デフォルト: NULL, 型: TINYTEXT name デフォルト: NULL, 型: TEXT links デフォルト: NULL, 型: TEXT regtime デフォルト: NULL, 型: INT subject デフォルト: NULL, 型: TEXT body デフォルト: NULL, 型: TEXT password デフォルト: NULL, 型: TINYTEXT このとき、SELECT * FROM `Database`.`Table_A`, `Database`.`Table_B` LIMIT 0, 30; を実行して得られた結果が、    tel      name    links        regtime      subject       name       body        password 000000000  サンプルA  okwave.jpA   1246247993     NULL        NULL      NULL       22521343 000000001  サンプルB  okwave.jpB   1246248003     NULL        NULL      NULL       22521343 000000002  サンプルC  okwave.jpC   1246249258     NULL        NULL      NULL       22521343 000000000   NULL    NULL      1246247993  サンプル書き込み1  サンプルD  サンプル1。ここが本文... 22521343 000000000   NULL    NULL      1246247993  サンプル書き込み2  サンプルE  サンプル2。ここが本文... 4654387368 000000000   NULL    NULL      1246247993  サンプル書き込み3  サンプルF  サンプル3。ここが本文... 13213843843 このようになってしまいます。 そのテーブルが持たないカラムのうち数字のみが記録されているカラムだけ 勝手に別のテーブルに記録されている値が入った状態で出てきてしまうのです。 IPアドレスを記録してあるカラムの値にはドットが入っているためか、 上には該当せず、NULLはちゃんとNULLとして返ってきます。 他にも、数字以外の文字列を含むカラムのデータはすべて正常に動いています。 いろいろ調べている最中ですが、 phpMyAdminで上記のSQLクエリを実行しても同じ結果が得られたため、 テーブルの使い方が悪いのかクエリに何か足りないのかだと思います。 しかしまだ原因が特定できないので、ご助力いただきたいのです。 よろしくお願いします。 環境は、 MySQL: 5.1.34 文字セット: UTF-8 unicode 照合順序セット: utf8_general_ci PHP: 5.2.9

    • ベストアンサー
    • MySQL

専門家に質問してみよう