フォームへの未入力を無くす方法

このQ&Aのポイント
  • フォームの未入力「コンボボックス」と「テキストボックス」を事前に把握する方法をご提案します。
  • フォームの構成を生かし、未入力箇所が発生しないようにする方法をお伝えします。
  • コンボボックスへの選択入力を必須にし、テキストボックスの未入力箇所を特定する方法をご紹介します。
回答を見る
  • ベストアンサー

フォームへの未入力を無くしたい

[やりたいこと(宜しくおねがいします)] フォームの未入力「コンボボックス」と「テキストボックス」を事前に把握したい。 [(やりたいこと)の実現と希望] このサイトでアドバイスを頂きまして、長年に渡り作成できたデータベースが「68」、入力するフォームは「78」を超えます。現状「フォーム」の構成を生かす方法を含めアドバイスをお願いします。 [入力するフォームに共通していること] 1,コンボボックスとテキストボックス  ・全てのコンボボックスへの選択入力は必須になっている。  ・テキストボックスは未入力箇所も発生する。「未入力箇所は不特定」 2,フォームに共通して配している2つのコマンドボタン  ・フォームを閉じるボタン「マクロ(クリック時)」  ・情報の最新化ボタン「マクロ(クリック時)」   ※コンボボックスの選択項目追加時に反映用として配置 以上ですが、宜しくお願いします。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.6

VBAの画面(VBE)が開きにくいのは問題ですね。 AccessのDBファイルの最適化/修復はたまにやられていると思うのですが、Officeの修復を試してみてはいかがでしょう。 VBEの調子が悪い時にプロシージャを設定するのも怖い感じですが、疑問点に関する説明を記載しておきます。 > クリック時の設定になっている現在のマクロを消して、新たにプロシーシャを選択して以下をコピーすればよろしでしょうか。 はい、ただし今回のプロシージャを設定して、閉じるボタンのクリックで動作がおかしかったりエラーが出なければ変更しなくても大丈夫だと思います。 > データベースでVisual Basicを起動させ、アドバイスの記述「以下」をコピーすれば宜しいでしょうか。 更新前処理の設定でコードビルダーを選択したらVBEが開きますので、そこで更新前処理のコードを記載してください。 開いた時に Private Sub Form_BeforeUpdate(Cancel As Integer) End Sub となっているので Cancel = BlankCtl(Me.Name) を追加するだけです。 そこでその状態で、メニューの「表示」で「プロジェクトエクスプローラー」を選択したら左ペインが出てこないでしょうか。 そこで左ペインが開かないとなると、メニューの「挿入」で「標準モジュール」を追加すると タイトルバーにModule1とか出てると思いますので、右ペインに Public Function BlankCtl(ByVal MFormName As String) As Boolean から End Function までをコピペしてください。 これは一ファイルにたいして一度です。 蛇足ですが Microsoft Visual Basic だけだと別のものになります。 AccessなどOffice製品で使うものは VBA(Visual Basic for Applications) その編集画面は VBE(VisualBasicEditor) と記載したほうが勘違いが無くていいと思います。

eokwave
質問者

お礼

ありがとうございます。牛歩のごとくですが、頑張って進めてまいります。まだまだ、データベースは完成の域では無いとの認識ですので、この気持ちを持ち続けたいと思っております。今後もよろしくお願いします。 お陰様で、なんとかデータベースを利用できる様になって居ります。実は、定年間際に営業部門から集計業務部門に異動(私以外は20代~30代の社員)させられた経験があります。出来るわけがないとの視線を強く感じたものです。幸いにもACCESSソフトを知っていたことと、親身なアドバイスのお陰で他の誰よりも早く、集計業務をこなすことができるようになり、なんとか定年まで勤めあげれた過去を持っております。感謝の気持ちを込めて、比較的利用する機会のあるデータベースの一部をご紹介します。感謝です。 「利用があるデータベース」 ◆購入品管理「保証期間の管理、交換部品の交換日管理」◆在庫管理「適正在庫と現在庫、他」◆医療関係「予約日管理、診療履歴(医師名・処置名・他)、投薬情報、健康情報、各種保険管理、他」◆食材管理「消費期限の管理、他」◆名簿管理「親戚縁者、知人、友人」◆金言名言集「時々見ます」◆情報日記「経験と情報(フリー記載)」◆パソコン管理「不具合履歴と対処情報、各種登録情報の履歴管理、他」◆ネットのアドレス管理「URLの登録と情報検索」◆家事情報「不具合履歴と対処情報、他」◆生活電話帳「随時登録、メモ、メール、URL、他」◆資格管理「資格期限、管轄元情報(書類・費用・他)」◆書類備品管理「書類の保管場所(机の引出2段目とか)、備品の保管場所、他」◆ACCESS情報管理「アドバイスの履歴、他」 「データベース利用が高まった背景」 私、まめにデータの蓄積は行っていたのですが、蓄積されたデータを上手く使えなかった時期が長くありました。その最大の原因が検索性の悪さだと、親身なアドバイスで気付かされました。フリー検索での「AndとOr」の違いとか、ドルグボタンでの並び替えとか、沢山のアドバイスのお陰で便利に使っています。正に、アドバイスに対する感謝の気持ちしかありません。ありがとうございます。感謝。

その他の回答 (5)

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.5

No4で一部間違いがありました。終了の時に「いいえ」にしたら次から未入力チェックをしなくなってました。 閉じるボタンの If BlankCtl() = False Then DoCmd.Close acForm, Me.Name End If を If BlankCtl() = False Then DoCmd.Close acForm, Me.Name Else Me.BeforeUpdate = "[イベント プロシージャ]" End If あと、Function BlankCtlをフォーム毎に記載しなくてもいいようにしたい場合(そのファイル全体で使える) これまでは無視して全てを以下のようにしてください。 更新前処理 Private Sub Form_BeforeUpdate(Cancel As Integer) Cancel = BlankCtl(Me.Name) End Sub 閉じるボタン Private Sub フォームを閉じるボタン_Click() Me.BeforeUpdate = "" If Me.Dirty = True Then If BlankCtl(Me.Name) = False Then DoCmd.Close acForm, Me.Name Else Me.BeforeUpdate = "[イベント プロシージャ]" End If Else DoCmd.Close acForm, Me.Name End If End Sub フォームは以上で、以下のコードは同じファイルの全てのフォームから参照できるように 以下添付画像参照してください。 標準モジュールを追加してModule1のところに Public Function BlankCtl(ByVal MFormName As String) As Boolean Dim ctl As Control Dim Cancel As Boolean Dim MForm As Form Set MForm = Forms(MFormName) For Each ctl In MForm.Controls With ctl If .ControlType = acTextBox Or .ControlType = acComboBox Then If Nz(ctl) = "" Then MsgBox ctl.Name & "が未入力です", vbCritical Cancel = True End If End If End With Next ctl If Cancel = True Then If MsgBox("未入力のままでよろしいですか?", vbYesNo + vbInformation + vbDefaultButton2) = vbYes Then Cancel = False End If End If BlankCtl = Cancel End Function

eokwave
質問者

お礼

ご返事が大変遅れまして申し訳ございません。 データベースがかなり重くなっている様でして、Microsoft Visual Basic を起動するに時間を要する状況です(但し、データベースの使用では全く問題ありません)。応答なし・・・、タスクバーが非アクティブで固まったり。そんな状況です。そこで提案ですが、一旦、終了させて再度参戦させていただければと考えて居ります。過去、kkkkkm様のアドバイスは全て「ベストアンサー」のクオリティーでもあり、知識レベル「まず頭で理解」での習得であっても問題ないと思います(作業は牛歩のごとく・・・)。 私のレベルの低さで申し訳ございません、アドバイスに即反応できない部分もあり、その点だけ再度のお尋ねさせて下さい。理解できた段階で、一旦、終了したいと思います。ご理解いただければ幸いです。 [全ての入力フォームへの対応] 1,更新前処理   Private Sub Form_BeforeUpdate(Cancel As Integer)   Cancel = BlankCtl(Me.Name)   End Sub 2,閉じるボタン 「再度お尋ね」 現在は閉じるボタンを選択「イベントのクリックでマクロを選びアクションで(閉じる)を選択」しています。従って、クリック時の設定になっている現在のマクロを消して、新たにプロシーシャを選択して以下をコピーすればよろしでしょうか。   Private Sub フォームを閉じるボタン_Click()   Me.BeforeUpdate = ""   If Me.Dirty = True Then    If BlankCtl(Me.Name) = False Then    DoCmd.Close acForm, Me.Name    Else    Me.BeforeUpdate = "[イベント プロシージャ]"    End If   Else    DoCmd.Close acForm, Me.Name   End If   End Sub [データベースへの対応] 「再度お尋ね(未熟で申し訳ございません)」 データベースでVisual Basicを起動させ、アドバイスの記述「以下」をコピーすれば宜しいでしょうか。しかし、Visual Basicを起動させてみて、左ペインに「アイコン(Microsoft Access・・・)」を表示させられない状況です。申し訳ございません。 Public Function BlankCtl(ByVal MFormName As String) As Boolean Dim ctl As Control Dim Cancel As Boolean Dim MForm As Form Set MForm = Forms(MFormName) For Each ctl In MForm.Controls With ctl If .ControlType = acTextBox Or .ControlType = acComboBox Then If Nz(ctl) = "" Then MsgBox ctl.Name & "が未入力です", vbCritical Cancel = True End If End If End With Next ctl If Cancel = True Then If MsgBox("未入力のままでよろしいですか?", vbYesNo + vbInformation + vbDefaultButton2) = vbYes Then Cancel = False End If End If BlankCtl = Cancel End Function

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.4

先のファームを閉じるボタンでは2回チェックが入りましたので、以下に変更してみてください。編集中でなければ未入力チェックはしません。 Private Sub フォームを閉じるボタン_Click() Me.BeforeUpdate = "" If Me.Dirty = True Then If BlankCtl() = False Then DoCmd.Close acForm, Me.Name End If Else DoCmd.Close acForm, Me.Name End If End Sub

eokwave
質問者

お礼

ご返事が遅れております。申し訳ございません。最終のアドバイスのお礼にてご説明です。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.3

>フォームへの未入力を無くしたい  長年に渡り作成できたデータベースが「68」、入力するフォームは「78」を超えます。 ----------------------------------------------------------------------- 失礼ですが、ご質問の焦点がボケています。 1.入力フォームの選択漏れなら  スーパのトイレの当番表のチェックシートのようなものを  テーブル化(ID,日付、フォーム名、担当名)  重複登録を回避するため  日付とフォーム名の2つのフィールドを主キーにする 2.フォーム内の項目なら  フォームまたはクエリ、コンボボックスのレコードソースの  テーブルのフィールドのプロパティーの値要求を「はい」にする  添付図は顧客名のプロパティーです

eokwave
質問者

お礼

貴重なアドバイスありがとうございます

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.2

No1はイベントプロシージャです。 フォームの全てのテキストボックスとコンボボックスの未入力を調べて未入力があればその都度コントロールの名前をメッセージします。 閉じる場合は編集中でなくてもメッセージが出ます。レコードの移動などの場合は編集中でない場合メッセージが出ません。

eokwave
質問者

お礼

ご返事が遅れております。申し訳ございません。最終のアドバイスのお礼にてご説明です。

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.1

フォームの更新前処理 Private Sub Form_BeforeUpdate(Cancel As Integer) Cancel = BlankCtl() End Sub ここまで ------------------------------------- フォームの更新前処理と同じところに Private Function BlankCtl() As Boolean Dim ctl As Control Dim Cancel As Boolean For Each ctl In Me.Controls With ctl If .ControlType = acTextBox Or .ControlType = acComboBox Then If Nz(ctl) = "" Then MsgBox ctl.Name & "が未入力です", vbCritical Cancel = True End If End If End With Next ctl If Cancel = True Then If MsgBox("未入力のままでよろしいですか?", vbYesNo + vbInformation + vbDefaultButton2) = vbYes Then Cancel = False End If End If BlankCtl = Cancel End Function ここまで ------------------------------------------------- 閉じるのマクロでエラーになった場合こちらにしてください。 Private Sub フォームを閉じるボタン_Click() If BlankCtl() = False Then DoCmd.Close acForm, Me.Name End If End Sub

eokwave
質問者

お礼

ご返事が遅れております。申し訳ございません。最終のアドバイスのお礼にてご説明です。

関連するQ&A

  • マクロ フォームでのチェックボックスについて

    教えてください。 1)フォームでテキストボックス2つ、ボタンで新しい入力フォーム表示 2)入力フォームでチェックボックス6個、コンボボックス6個を作ります。 3)チェックボックスにチェック(1個のみ)したら、1)のフォームのテキストボックスにチェックされた、項目とコンボボックスで選択された内容が転記したい。 例)果物にチェック、コンボでブドウと選択  テキストボックス→果物 ブドウ というようにフォームに転記させたい。 以前、シートでのマクロを教えていただきましたが、フォームだと頭が混乱してしまいました。 簡単で良いので、マクロの記述を教えてください。

  • リアルタイムで入力データを反映させたい「修正版」

    入力したデータをリアルタイムに近い形で対象オブジェクトへ反映させたいと思っています。是非、アドバイスをお願い致します。 [やりたいこと] コンボボックス「プルダウンメニュー」を利用したデータ入力を行っています。コンボボックスで選択するデータを新たに追加した際、リアルタイムに近い形でプルダウンメニューに反映できればと思っています。 [現状での対応] フォームにコマンドボタンを配して、クリック時のマクロ(コマンドの実行)で「最新の情報に更新」を設定し対応しています。時々、ボタンを押し忘れることがあり、データ追加時点にコンボボックスでの選択を可能にしたいと考えています。 [おねがい] データベースオブジェクトの項目フィールドは「項目コンボ」から入力しています。「項目コンボ」で選択するデータの追加は「項目フォーム」で行います。以下のオブジェクト構成とした場合の効果的な設定方法を教えて下さい。 ■データベースオブジェクト ・テーブル(名前)メインテーブル「フィールド(名前):ID、項目、・・・」 ・フォーム(名前)メインフォーム「テキストボックス(名前):ID、項目(コンボボックス入力)、・・・・」 ・コンボボックス(名前):項目コンボ ■コンボボックス入力用データの追加オブジェクト ・テーブル:項目テーブル「フィールド:ID、項目」 ・フォーム:項目フォーム「テキストボックス:ID、項目」※一覧フォーム 以上ですが、宜しくお願いします。

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

    Microsoft Accessでフォームでの入力方法について教えてください。 本の管理データベースを作成しております。 書籍の情報をデータベースに入力するフォームを作っておりますが、テーブルの項目を入力する際の方法を、直接入力とリストから選択する方法を両方できるようにはできないでしょうか。 例えば、「発行書店」を入力するときに、テキストボックスに直接入力してもOK、別テーブルに書店の一覧を作っておいて、そのリストをコンボリストに表示させ、クリック選択するとテキストボックスに入るような形でもOKのようにしたいのです。 コンボボックスでリストから選ぶだけでなく、ボックス内に直接入力してもテーブルに反映できるようにできれば話が早いのですが、デザインビューのプロパティで入力チェックを「いいえ」にしてもエラーが出て設定できないので・・・。 無知で申し訳ありませんが、どうかご教示ください。

  • フォームでパラメーターを求められます

    フォームにコンボボックスを作りました。 コンボボックス(年指定)の中は、 2005 2006 2007 ・・・・・・・・・・・ といったような年度の位置づけです。 さらにコマンドボタンを作ってクリック時にマクロを指定しました。 マクロには、 アクションが「クエリを開く」があり、 クエリは普通の選択クエリで、 実績年フィールドの抽出条件に、 =[Forms]![フォーム1]![年指定]としました。 これでコンボボックスで選んだ年度のデータが抽出されて表示されるのかと思っておるのですが、 コマンドボタンを押すと、 パラメーターの入力を聞いてきます。(Forms!フォーム1!年指定) どこが間違っているのでしょうか? 情報不足かもしれませんが、ご指導ください。

  • ACCESSでコンボボックスからの入力でリスト外の追加をフォームを使っ

    ACCESSでコンボボックスからの入力でリスト外の追加をフォームを使って登録 ACCESSのフォームを使ってデータ入力を作成しています、"顧客名"をコンボボックスを使って選択するようにしていますが。 リスト外の新規顧客を入力する際には別の"顧客登録"フォームが開いて、顧客情報(読み仮名、顧客名、都道府県コード、所在地)を入力して、閉じると登録した"顧客名"がコンボボックスから選択できるようにしたいと思い、マクロを使用して(VBはよくわからないので) イベント→リスト外入力時→”顧客登録”フォームが開く 必要事項を入力し、閉じるボタンをクリック。 してみたのですが、コンボボックスのリストに先に入力した新規データが出てきません。 何が足りないのかご教授お願いいたします

  • access 入力フォームへの表示

    初歩的な質問で申し訳ありません。 accessで商品マスタへの入力フォームを作成しました。 商品マスタテーブルから作成しました。 新規入力ボタン、登録ボタンを作成して、ボタンクリック時にのみ 新しいレコードへの移動、テーブルへのデータ更新を実行するようにしました。 この段階で、できれば入力フォーム上でコンボボックスなどを利用して検索を行い、 選択データをフォーム上に表示させたいと思いました。 ところがまったく知恵が働かず、どうしてよいのやら途方にくれています。 検索フォームを別途設けてもよいのですが、商品数が200たらずで、 今はコンボボックスで十分かなと思っています。 商品マスタにはカタカナ二文字の「検索キー」フィールドを設けており、 これをキーにしてクエリ(「Q商品検索」)で昇順に並べ、コンボボックスのコントロールソースを そのクエリにしました。 コンボボックスの更新後の処理イベントでマクロを使い、 「フォームを開く」にしてみましたが、その他の条件のつけ方がわかりません。 まったく的外れなことをしているのかもしれません・・・。 本やネットの質問過去ログで探してはみましたが、皆さん先を進んでおられて、窮してしまっています・・・。 このような状態でaccessを触るな!とお叱りを受けそうですが、 どうかお助け下さい。 よろしくお願いします。

  • EXCEL ユーザーフォームを使ったマクロ

    データの登録をするのにユーザーフォームを使おうと思うのですが、なかなかうまくいきません。教えてください。 ユーザーフォームにはコンボボックス、テキストボックス、コマンドボタンが貼り付けてあります。(コンボボックスのリストには呼び出したいシートの名前が入っています) コンボボックスのリストの中から呼び出したいシートを選択し、テキストボックスに入力した内容を、コマンドボタンを押すことで選択されたシート上の、あるセルに登録したいのですがどうすればよいでしょうか?

  • エクセル マクロ フォームに転記したい

    (1)エクセルSheet1にボタンをクリックするとフォームを出てくる。(2)そのフォームは、転記する専用のフォーム。(3)転記フォームの中にボタンを作り、新しいフォームが出てくる。(4)コンボボックスに表示した文字を転記フォームのテキストボックスに転記したい。 この様なことは出来ますか? マクロの記述を教えてください。

  • Access2003のフォームのコンボボックスは入力が必須なのでしょうか?

    会員管理のデータベースを作っています。 新規入力画面のフォームに5つのコンボボックスがあります。 広告媒体やコース、担当者を選択するコンボです。 新規入力して、「レコードの保存」「レポートを開く」クエリを組んだボタンで 入力後に顧客名や諸情報の入ったレポートを出しているのですが コンボボックスが1つでも未選択だと、空のレポートが開いてしまいます。 未選択コンボがあっても、where条件で氏名でひぱって、氏名+入っている情報だけでレポートを出したいのですが・・・。 未選択コンボがあると、テーブルには保存できてもレポートには反映されないものなのでしょうか?

  • Accessのフォームで入力規制したい

    お世話になります。またまた、教えていただきたく投稿させていただきました。 Accessのフォーム内に、コンボボックス(値リスト)を作り、プロパティの”規定値”として、”選択必須”と入力してます。 それを選択しないとレコード追加できないようにしたいのですが、入力規制に「Not "選択必須"」と入力してみたのですが、選択必須のままでレコード追加ができてしまいます。 どのように書けば追加できないようになるんでしょうか?すみませんよろしくお願いします。

専門家に質問してみよう