いつもお世話になっております。
VBAを独学で勉強している者です。
請求処理メニューを作っている最中なのですが、取引先マスターを入力していくフォームの入力値にいくつか機能を持たせることにしました。
取引先コードは10桁文字数で管理されるという設定なので10桁以外で入力した際は、BeforeUpdateイベントでエラーが出るようにし、重複した数値が入力した際もBeforeUpdateイベントでエラーが出るようにしたいのですが、実行してみると【実行時エラー’94 Nullの使い方が不正です。】となります。下記は作成途中のプログラムをコピペしたものです。
▲がついている部分が黄色く反転しています。
参考書を元に作成していったのですが、エラーがでる原因がわからないためアドバイスをいただきたいです☆
Private Sub 取引先コード_BeforeUpdate(Cancel As Integer)
Dim length As Long 'len関数の戻り値
Dim ret As String 'DLookup関数の戻り値。
length = Len(Me!取引先コード)
If length <> 10 Then
MsgBox "取引先コードは10桁の数値でなければなりません", vbOKOnly + vbInformation, "入力値エラー"
Cancel = True
Me!取引先コード.SelStart = 0
Me!取引先コード.SelLength = Len(Me!取引先コード)
End If
▲ret = DLookup("取引先コード", "取引先マスターT", "取引先コード='" & Me!取引先コード & "'")
'重複のチェック
If IsNull(ret) Then
Exit Sub
Else
MsgBox Me!取引先コード & " は登録済みです", vbCritical + vbOKOnly, "入力値エラー"
Cancel = True
Me!取引先コード.SelStart = 0
Me!取引先コード.SelLength = Len(Me!取引先コード)
End If
End Sub
宜しくお願いいたします。
No.5
- 回答日時:
>・・・とメッセージが出てしまうことです
これは新規レコードの入力ではなく既存レコードの場合だけですよね?
「取引先コード」は一旦登録してしまえば変更の必要が発生する事は稀有なので
私だったら、誤変更を避けるために
「取引先コード」のプロパティのその他の中にあるタブストップを「いいえ」にしておくとか
フォームのレコード移動時に Me.NewRecord で判断して
「取引先コード」の「編集ロック」を「はい」とかにします。
>「取引先コード」のプロパティのその他の中にあるタブストップを「いいえ」にしておくとか
思いつきませんでした!!
簡単な設定で大分使いやすくなりますね!
プロパティの内容も全部把握できていないので勉強しなおします☆
補足にまで答えていただいてありがとうございました!!
No.4
- 回答日時:
Variant を使わない場合・・・。
Private Sub 取引先コード_BeforeUpdate(Cancel As Integer)
Cancel = CBool(Len(Me.取引先コード & "") <> 10)
If Cancel Then
MsgBox "取引先コードは10桁の数値でなければなりません", vbOKOnly + vbInformation, "入力値エラー"
Else
Cancel = Len(Nz(DLookup("取引先コード", "取引先マスターT", "取引先コード='" & Me.取引先コード & "'")))
If Cancel Then
MsgBox Me!取引先コード & " は登録済みです", vbCritical + vbOKOnly, "入力値エラー"
End If
End If
If Cancel Then
Me.取引先コード.SelStart = 0
Me.取引先コード.SelLength = Len(Me.取引先コード)
End If
End Sub
×Length = Len(Me!取引先コード)・・・・・・・・・・未入力の場合、エラーが発生します。
○Length = Len(Me.取引先コード & "")・・・・・・"" を付加することでエラーが回避できます。
×DLookup("取引先コード", "取引先マスターT", "取引先コード='" & Me!取引先コード & "'")
○Nz(DLookup("取引先コード", "取引先マスターT", "取引先コード='" & Me!取引先コード & "'"))
NZ関数は、戻り値がヌルであれば""に置換します。
Husky2007サン、いつもありがとうございます!
NZ関数や、CBool等・・・・・
正直今初めてみた単語たちでした~^^;
恥ずかしながらまだ基礎の基礎も出来ていないド素人です。。
もう少し勉強して教えていただいた方法も検討してみますね!!
No.3
- 回答日時:
もう少し「ツッコミ」入れさせてもらいます。
>取引先マスターを入力していく
とのことなので、Accessの話ですか?
なら
テーブルデザインで、取引先コードを主キーにすれば、
重複入力を排除できますし、
10桁チェックも入力規制欄に、Len([取引先コード]) = 10
エラーメッセージ欄に、"取引先コードは10桁の数値でなければなりません"
とすればコードを書かなくて済みます。
また
DLookup("取引先コード", "取引先マスターT", "取引先コード='" & Me!取引先コード & "'")
は、取引先コード がテキスト型なら問題ありませんが
数値型なら
DLookup("取引先コード", "取引先マスターT", "取引先コード=" & Me!取引先コード)
です。
Variant型の指摘ついては他の方と一緒。
あるいは、DlookUp ではなくて Dcount で判断するとか・・
この回答への補足
お返事ありがとうございます☆
ご指摘の通り、Accessです。
取引先コードを主キーに設定していて、テーブルデザインでの規制も検討しましたが、エラーの出るタイミングや、エラーの出た後のカーソルの行方の仕様が思うように出来ず、VBAで操作に当たった次第です。
取引先コードは頭が0で始まる事も視野にいれ、テキスト型に設定しています。
データベースをコピペしてテーブル設計のみでの規制もまた検討してみます!!
色々実験していくと、システム開発の難しさを痛感します。
現在困っているのは、取引先コードに重複規制をかけたせいなのか、あらかじめ”1234567890”で取引先コードを登録しておき、以後会社名などのデータ変更時等でマスター変更をしたい時、誤って”1234567890”のコードを消してしまったときに、前回登録時と同じコードの”1234567890”と入力しなおして登録しても「1234567890は登録済みです。」とメッセージが出てしまうことです。
まだまだ勉強が必要ですネ^^;
上記のような現象の回避策はあるのでしょうか??
お手すきのときで構いませんのでアドバイスいただけませんか??
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
「Nullの使い方が不正です」のエラー
Visual Basic(VBA)
-
ACCESSのSQLで、NULLかNULLでないかの判定
その他(データベース)
-
Nullの使い方が不正ですのエラーメッセージについ
Visual Basic(VBA)
-
-
4
Access サブフォームでの選択行の取得
その他(データベース)
-
5
Accessでテーブルの値をテキストボックスに代入するには?
Access(アクセス)
-
6
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
7
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
8
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
9
アクセス VBAについて FROM句の構文エラー
Access(アクセス)
-
10
Accessでフォームから別フォームのテキストボックスの値を設定する
Visual Basic(VBA)
-
11
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
12
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
13
Access 最後のレコードに到達するまでループ処理を行う方法
Access(アクセス)
-
14
DLookupがうまく出来ません
Access(アクセス)
-
15
ACCESSでテーブルをコピーしようとすると3211のエラーが出てしまう
Access(アクセス)
-
16
新規レコード行を非表示にしたい
Access(アクセス)
-
17
VBAをつかってクエリの情報を抽出するには??
Visual Basic(VBA)
-
18
ACCESS 複数のフォームから同一テーブル参照
Access(アクセス)
-
19
2つのテーブルに共通するレコードを削除したい
Access(アクセス)
-
20
Accessの画面更新を一時的に停止する方法。
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
JANコードとPOSコードは同じ?
-
1日に1人がこなせるプログラム...
-
access2021 VBA メソッドまたは...
-
SQL
-
変数名「cur」について
-
1、Rstudioで回帰直線を求める...
-
VBA 現在のセル番地を記憶、復...
-
ASCIIコードを文字に変換したい
-
Exel VBA 別ブックから該当デ...
-
ユーザーフォームに2つのコン...
-
Excel VBAでOpenTextのFieldInf...
-
Visual BASIC イベント作成しよ...
-
Nullの使い方が不正です。
-
access2003 クエリSQL文に...
-
マクロ 連続印刷
-
改ページ
-
videopadについて
-
セレクトボックスで年月日を指...
-
JavaScriptの定数名が取り消し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
JANコードとPOSコードは同じ?
-
1日に1人がこなせるプログラム...
-
JavaScriptの定数名が取り消し...
-
access2003 クエリSQL文に...
-
Nullの使い方が不正です。
-
sinカーブの表示のさせ方
-
access2021 VBA メソッドまたは...
-
IF文、条件分岐の整理方法
-
COBOLの文法
-
変数名「cur」について
-
Exel VBA 別ブックから該当デ...
-
【VB6】実行ファイルとした後、...
-
Excel VBA素人です。VBAで図形...
-
ペンダントライトのコードの色...
-
VBAでファイルオープン後にコー...
-
PreviewKeyDownイベントが2回...
-
ACCESSユニオンクエリでORDER B...
-
VB6のComboBox関連の書き方をVB...
-
Access DCountでの連番について
おすすめ情報