1

フォームに、テーブルで満たされたリストを行ソースとして持つコンボボックスがあります。ユーザーがフィールドに入力し、何かを変更して削除すると、コンボボックスが空になり、「バリアント データ型ではない変数に null 値を割り当てようとしました」というエラーが表示されます。

問題は、コンボボックスが空の文字列を許可していないことですが、コンボボックスでエラーの前に発生するイベントが見つからないことです。したがって、Len または IsNull を使用してエラーをキャッチすることはできません。現在、私はこの「回避策」を使用していますが、コンボボックスではなくフォームのエラーイベントを使用するため、具体的ではありません。

Private Sub Form_Error(DataErr As Integer, Response As Integer)
    Me.myField.Undo
    Response = acDataErrContinue
End Sub

この問題を処理するより良い方法はありますか?

私はこれを見つけまし。しかし、それで問題は解決しませんでした。

4

2 に答える 2

3

Remou がコメントで示したように、エラーは、新しい値がコンボボックスに入力された後に行っていることに対応しています。コンボボックスのイベントを確認してください。型を気にせず、null 値を使用したい場合は、変数を Variant 型に変更できます。文字列や整数などの実際のデータ型を使用している場合は、NZ() 関数を使用して null を除外します。

たとえば、コンボボックスが null の場合に空の文字列を文字列変数に割り当てたい場合は、次のようにします。

dim s as string
s = nz(me.combobox,"")

エラーの前に発生することについては、コードのどこかに、エラーの原因となっている問題のあるコードが既にあります。あなたはそれを見つける必要があります。より詳細で具体的な回答を提供するために、より多くの情報が必要になります。

于 2013-03-20T18:22:14.623 に答える
2

これは、あなたを夢中にさせるように設計された、文書化されていない Microsoft の「機能」です。そして、「あなたのコードを見てください」、「あなたのコードのどこか」とあなたに言う人々は、彼らが何について話しているのか分かりません.

2 つの回避策。テーブルの基になるフィールドを変更して null を許可するか、またはこれが最善の方法だと思います。コンボをバインドされていないコントロールに変更し、AfterUpdate イベントで基になるフィールドを設定します。

于 2015-05-23T00:05:26.600 に答える