• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MS Access フォームでの入力方法につい)

MS Accessフォームでの入力方法について

このQ&Aのポイント
  • Microsoft Accessでフォームでの入力方法について教えてください。本の管理データベースを作成しております。
  • 書籍の情報をデータベースに入力するフォームを作っていますが、テーブルの項目を入力する際の方法を、直接入力とリストから選択する方法を両方できるようにはできないでしょうか。
  • コンボボックスでリストから選ぶだけでなく、ボックス内に直接入力してもテーブルに反映できるようにできれば話が早いですが、デザインビューのプロパティで入力チェックを「いいえ」にしてもエラーが出て設定できないので、どうすれば良いのでしょうか?

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

質問の場合は以下の方法をとります。 http://support.microsoft.com/kb/197526 しかし、これを質問の場合に合わせて書き換えて ください、というのは大変かも知れません。 上記の、NotInListとはコンボボックスの プロパティの「リスト外入力時」のイベントに設定 します。 説明を簡単にするためにこちらで利用方法を 設定します。 (1) テーブルの設定 T図書: 図書ID (テキスト型) (主キー) 図書名(テキスト型) 発行書店 (テキスト型) T発行書店: 発行書店ID(テキスト型) (主キー) 発行書店(テキスト型) (2) フォームの作成 フォームの「新規作成」を選択し、 「基になるテーブルまたはクエリの選択」で「T図書」を 選択し、「オートフォーム表形式」を選択し、「OK]として 出来たフォームを適当な名前で保存します。 (3) フォームの改造 フォームをデザインビューで開き、「発行書店」の上で 右クリックして、コントロールの変更でコンボボックス を選択します。 (4) コンボボックスの設定 コンボボックの上で右クリックからプロパティを開き、 「値集合ソース」に、以下を貼り付け 保存します。 SELECT T発行書店.発行書店ID, T発行書店.発行書店 FROM T発行書店; また、列数、列幅を以下に設定します。 列数 2 列幅 0cm,2cm 次に、「リスト外入力時」の右端をクリックして「ビルダの選択」 を表示し、「コードビルダ」を選択して「OK]とします。 表示された、コード表を以下のようにに設定します。 Private Sub 発行書店_NotInList(NewData As String, Response As Integer) Dim db As Database Dim rs As Recordset Dim Msg As String Dim NewID As String On Error GoTo ER_R If NewData = "" Then Exit Sub Msg = "'" & NewData & "' は登録されていません。" & vbCr & vbCr Msg = Msg & "新規に登録しますか?" If MsgBox(Msg, vbQuestion + vbYesNo) = vbNo Then Response = acDataErrContinue MsgBox "もう一度登録し直してください" Else Set db = CurrentDb Set rs = db.OpenRecordset("T発行書店", dbOpenDynaset) Msg = "新しい発行書店IDを入力してください。" & vbCr & "発行書店ID." NewID = InputBox(Msg) rs.FindFirst BuildCriteria("発行書店ID", dbText, NewID) ' If the NewID already exists, ask for another new unique ' CustomerID Do Until rs.NoMatch NewID = InputBox("発行書店ID " & NewID & " はすでに存在します." & _ vbCr & vbCr & Msg, NewID & " 既存") rs.FindFirst BuildCriteria("発行書店ID", dbText, NewID) Loop ' 新しいレコードの設定 rs.AddNew ' 発行書店IDの登録 rs![発行書店ID] = NewID ' 発行書店の名前の登録 rs![発行書店] = NewData ' 登録したレコードの保存 rs.Update Response = acDataErrAdded End If Exit Sub ER_R: MsgBox Err.Description Response = acDataErrContinue End Sub 以上です。基本的なNotInListプロパティの使い方です。

hwoman
質問者

お礼

ありがとうございます。 やりたいことをやりたければ、もっと勉強が必要ですね。 これを機にまた勉強をしたいと思います。

その他の回答 (2)

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

ルックアップテーブルを使うのが簡単そう。たとえば 『書店一覧』というテーブルがあって 書店名 アサヒ 昼間 夕日 等のデータが格納してあるとし。 書籍テーブルでは書店名を納めたいフィールドが 『発行書店』とすれば 書籍テーブルをデザインビューで開き 発行書店の、ルックアップタブを開き 表示コントロール → コンボボックス 値集合タイプ→テーブル/クエリ 値集合タイプ→書店一覧 連結列→1 列数→1 列幅→2 (見やすいサイズに) 等としておけば、テーブル上でもフォーム上でも お望みの形になると思います。 書店の一覧表テーブル内に、ID・書店名・電話番号・住所などが ある場合はもう少しややこしくなりますけど。 そちらのテーブルの内容が分からないのでここまで。 ところで、 変数を宣言する際にどちらのライブラリを使うか明示されれば DAOとADOの共存できますよ。 http://msdn.microsoft.com/ja-jp/library/cc948691.aspx ↑の真ん中あたり

hwoman
質問者

お礼

ありがとうございます。 DAOとADOについて勉強してみます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

No1です。追加です。 DAOを使っているので、コード表のツールから 参照設定を選択して、 Microsoft DAO xx Object Library にチェックを入れて、OKとします。xxは3.6のような数字です。 このとき、 Microsoft ActiveX Data Objects xx Library にチェックが入っていたらはずしてください。 以上です。

hwoman
質問者

お礼

ありがとうございます。 基本の勉強がもっと必要だと思いました。 またよろしくお願いします。

関連するQ&A