
アクセスで大分類・中分類・小分類を作っています。
コンボボックスを連動させて,作成したのですが?
データー入力後,例えば中分類を変更しても,大分類や小分類がそのままで登録されてしまうのです。
それではダメですよね・・・
その部分がデータとしてあっていればいいのですが,違うければ弾いて欲しいやり方を
ご教示していただきたいのです。。。
ちなみに!
大分類に SELECT DISTINCT 配置署所 FROM ボンベ管理クエリ;
中分類に SELECT DISTINCT 署所記号番号 FROM ボンベ管理クエリ WHERE 配置署所=[大分類];
小分類に SELECT [ボンベID], [容器記号番号] FROM ボンベ管理クエリ WHERE 配置署所=[大分類] AND 署所記号番号=[中分類];
中分類と小分類には,イベントとして
Private Sub 小分類_Enter()
Me.小分類.Requery
End Sub
を書き込んでいます。
※ この質問をする場合のカテゴリ選択のようにしたいのです・・・・
ぜひどうかよろしくお願いします。
No.2ベストアンサー
- 回答日時:
そのフォームは単票でしょうか。
帳票なら以下の方法ではできません(コントロールを重ねないと不可能だと思います。)
現状のフォームをコピーし、コピーした方で動作確認してみます。
レコードが更新されても良いようにバックアップは取っておきます。
コピーした方のフォームに記述してあるイベント関係のものをすべて削除し、
以下の記述と置き換えてみます。
Private Function EnterCheck()
Dim vN As Variant
Dim i As Long, j As Long
vN = Array("大分類", "中分類", "小分類")
For i = LBound(vN) To UBound(vN)
If (Me.ActiveControl Is Me(vN(i))) Then
For j = LBound(vN) To i - 1
If (IsNull(Me(vN(j)))) Then
Me(vN(j)).SetFocus
Exit Function
End If
Next
Exit For
End If
Next
With Me.ActiveControl
.Requery
.Dropdown
End With
End Function
Private Function UpdateCheck()
Dim vN As Variant
Dim i As Long, j As Long
vN = Array("大分類", "中分類", "小分類")
For i = LBound(vN) To UBound(vN)
If (Me.ActiveControl Is Me(vN(i))) Then
For j = i + 1 To UBound(vN)
Me(vN(j)) = Null
Next
If (i <> UBound(vN)) Then
Me(vN(i + 1)).SetFocus
Exit Function
End If
Exit For
End If
Next
End Function
Private Sub Form_Load()
Dim vN As Variant
Dim i As Long
vN = Array("大分類", "中分類", "小分類")
For i = LBound(vN) To UBound(vN)
With Me(vN(i))
.ValidationRule = "Is Not Null"
.OnEnter = "=EnterCheck()"
.AfterUpdate = "=UpdateCheck()"
End With
Next
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
If (IsNull(Me.小分類)) Then Cancel = True
End Sub
※※ 操作は、必ず "大分類" → "中分類" → "小分類" の順であるとします。
※ Enter 時の動き
どのコンボボックスの Enter でも同じ処理を走ります。
まず、Enter になったのは「誰」を求めます。
求まったら、前操作のコンボボックスが入力されているか確認します。
値が設定されていなければ、そのコンボボックスにフォーカスを移動します。
値が設定されていれば、 Requery 後 Dropdown 表示します。
※ AfterUpdate 時の動き
どのコンボボックスの AfterUpdate でも同じ処理を走ります。
まず、AfterUpdate になったのは「誰」を求めます。
求まったら、後操作のコンボボックス値を Null に変更します。
次のコンボボックスにフォーカスを移動します。
※ フォームのオープン時
各コンボボックスに上記関数を実行する様、イベントに設定していきます。
また、入力規則に念のため Is Not Null を設定しておきます。
既に値が設定されていて、Delキー 等で削除された場合エラーとなるように・・・
※ フォームの更新前処理
コンボボックスは、必ず "大分類" → "中分類" → "小分類" の順と決めたので、
最後の Me.小分類 が Null なら Cancel = True として、更新を拒否します。
※ コンボボックス3つの処理をまとめましたが、個別に記述しても良いと思います。
※※ 検証等は十分に行ってください。また、不具合等あれば修正してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのコンボボックスでリス...
-
.flex-direction プロパティは...
-
帳票フォームでのあるコンボボ...
-
accessでオートナンバーを使わ...
-
動画編集アプリvllo抽出エラー
-
Accessでフォームに自動入力し...
-
Access サブフォームでの選択行...
-
PDFファイル/抽出許可され...
-
X-Ripperというフリーウェアに...
-
サブフォームを利用したクエリ...
-
ACCESS フォームで入力データ...
-
別MDBのフォームを起動
-
Access2000 サブフォームのReco...
-
入力した値をコンボボックスに...
-
Access 複数フォームを...
-
Access 指定したレコードへ移動
-
Access レイアウト変更したサブ...
-
Accessで○ヶ月前以前を抽出する...
-
エクセル関数で住所から丁目番...
-
「パラメータが少なすぎます。3...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのコンボボックスでリス...
-
accessでオートコンプリート機...
-
帳票フォームでのあるコンボボ...
-
Accessのコンボボックスの値が...
-
ACCESS リストボックスの字の色...
-
ACCESSクエリ抽出条件について
-
コンボボックスのリスト外入力...
-
リストボックスの時はリンク先...
-
Access 帳票フォームのコンボボ...
-
SQLサーバーからひっぱるACCESS...
-
更新クエリで変数は使えない?
-
Accessのフォーム(コンボボッ...
-
ACCESSでコンボボックスにSQLで...
-
ACCESSのリストボックス抽出に...
-
SQL…オーバーラップする時間
-
ACCESSでフラグによる文字表示
-
Oracleで文字列型の時間を引き...
-
同一値集合ソースの複数コンボ...
-
accessでのリストボックス選択...
-
.flex-direction プロパティは...
おすすめ情報