• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:access2000で存在しないデータを入力した時メッセージを表示させたい)

access2000で存在しないデータを入力した時メッセージを表示させたい

このQ&Aのポイント
  • access2000でファイルを作成する初心者が、IDを入力する際に存在しないデータの場合にメッセージを表示させたい。
  • メインフォームと情報の変更履歴を表示するフォームを作成中。IDが存在する場合は表示されるが、存在しない場合は「存在するIDはありません」というメッセージを表示させたい。
  • IDに重複はなく、メインフォームは1件しか表示されないが、変更履歴には複数のレコードが存在することがある。accessの知識がないため、簡単な方法を教えてほしい。

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.5

tab1: ID______fld_1 A001__AAAA A002__BBBB tab2: ID______tab1_ID____fld_1 1_______A001_______1111 2_______A001_______2222 フォーム: ID:______[A001________] fld_1:___[AAAA______] tab2: ___ID__tb1_ID_fld_1 [1____][A001][1111______] [2____][A001][2222______] tab1、tab2のテーブルからフォームを生成するとメインとサブフォームが生成されます。 あるフォームに [テキスト_ID]を配置し、それをテストして合致した場合にメイン・サブを開く。 そのサンプルコードは次のようです。 Private Sub コマンド0_Click()   Dim strID As String   If Len(Me.テキスト_ID & "") Then     strID = Me.テキスト_ID     If Nz(DLookup("ID", "tab1", "ID='" & strID & "'")) = "" Then       MsgBox "該当する[ID]はありません!", vbExclamation, " 警告"     Else       DoCmd.OpenForm "tab1", , , "ID='" & strID & "'"     End If   Else     MsgBox "先に、[ID]欄の入力を完了して下さい!", vbInformation, " お知らせ"   End If End Sub Private Sub コマンド0_Click()   Dim strID As String   If Len(Me.テキスト_ID & "") Then     strID = Me.テキスト_ID     If DCount("*", "tab1", "ID='" & strID & "'") = 0 Then       MsgBox "該当する[ID]はありません!", vbExclamation, " 警告"     Else       DoCmd.OpenForm "tab1", , , "ID='" & strID & "'"     End If   Else     MsgBox "先に、[ID]欄の入力を完了して下さい!", vbInformation, " お知らせ"   End If End Sub 先ずは、このように至極簡単なテーブル構造とデータでテストされたら宜しいと思います。

azukitty
質問者

お礼

何度もアドバイスありがとうございます。 見よう見まねですが、やっとできました! 期日がせまっておりましたので、とても助かりました。 中身の意味はまだまだ理解できないところがありますが、 次回は、少しでもわかるように勉強したいと思います。

その他の回答 (4)

noname#140971
noname#140971
回答No.4

tab1: ID__fld_1 1___aaa 2___bbb Private Sub コマンド_IDのチェック_Click()   Dim lngID As Long      lngID = Nz(Me.テキスト_ID, 0)   If lngID > 0 Then     lngID = Nz(DLookup("ID", "tab1", "ID=" & lngID), 0)     If lngID = 0 Then       MsgBox "該当する[ID]はありません!", vbExclamation, " 警告"     End If   Else     MsgBox "先に、[ID]欄の入力を完了して下さい!", vbInformation, " お知らせ"   End If End Sub とあるフォームに[テキスト_ID]を配置し[コマンド_IDのチェック]をクリックして[ID]がテーブルにあるかないかチェック。 課題1、変数宣言。 課題2、変数へのテキストボックスからの代入するコード。 課題3、If Then Else 文を使った条件分岐。 課題4、DLookup関数を使って既存[ID]を取得するコード。 課題5、MsgBox 関数を使っての告知要領。 ここでは、[ID]の型を長整数と仮定しています。 仮に、[ID]の型がテキスト型であれば、課題1、2、3、4に相当するコードの修正が必要です。 先ずは、質問をこの範囲に限定することですね。 そして、一歩、一歩です。

azukitty
質問者

お礼

ご回答ありがとうございます。 IDはテキスト型です。 Dim lngID As Longの部分を どのように変更すればよいのでしょうか。 私の知識が全くおいついていないようで まだ、うまく動いてくれません。 せっかく回答いただいたのに、なんだか申し訳ないです。

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

>Excelもマクロまでの知識ぐらいしかありません。 ExcelのマクロはVBAですよ >削除・追加をしないように設定したら、 どこでどのようにやっているのかの情報が何もないので回答できません

noname#182251
noname#182251
回答No.2

回答ではありませんが 「存在しないデータを入力した時メッセージを表示」は、私ならば基本的にやりません。不親切だからです。「有るデータから選ばせる」ように作ります。対象が多過ぎるならば、絞り込んで選べるような補助手段と組み合わせます。

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

簡単に出来る方法はありません VBAが必要です Accessは初めてでも、Excel等でVBAの経験があるのならできますよ

azukitty
質問者

補足

Excelもマクロまでの知識ぐらいしかありません。 VBAの経験がなければ、無理なのでしょうか。。。 あれから情報(メインフォーム)の追加は 別の画面(テーブル)でおこなうため、 削除・追加をしないように設定したら、 「指定したレコードに移動できません。  レコードセットの最後のレコードよりも後に  移動することはできません。」と表示され、 [OK]ボタンをクリックすると、 「アプリケーションの実行エラー  マクロ名:(例:検索)  条件:True  アクション名:レコードの移動  引数:-1,,新しいレコード,」 のメッセージ後、何も表示されなくなりました。 ※IDが存在する場合は、問題なく表示されます。 この回避もVBAが必要なのでしょうか。。。