先日質問した者です。その際はhatenaさまの回答でお世話になりました。別の事でやり方が分からない事がでてきました。
メイン・サブフォームがあります(メインIDでリレーション)。
サブフォームにはフィールドがいくつかあります。F1、F2・・・
F1、F2はコンボボックスでID選択となってます。F1選択時はF2がNULLの時に仮の項目(ID:90)が一旦代入される様にしてます(F2を先に選択時はF1がそうなる様にしてます)。仮の項目はフォームを閉じるまでに別な項目(ID:90以外)を選択させたいので、メインフォームにある閉じるボタンに注意喚起の下記のコードを記述しました。(クリック時イベント)
Dim check1 As Integer, kaeri As Integer
check1 = DCount("*", "クエリ1", "[F_Sub].Form![F1]=90 Or [F_Sub].Form![F2]=90")
If check1 > 0 Then
kaeri = MsgBox("項目90がありますが、そのまま閉じていいですか?", vbYesNo)
End If
その後はvbYes、vbNoの処理をさせてます。クエリ1はチェック用にフォームのメインIDだけを条件にしたものを用意してます(DCountの条件を一度に記載が難しかったので)。
これで出来たと思ったのですが、このコードだとサブフォームのフォーカスのある行でしかチェックが出来てない事に気づきました。例えば2行目に項目IDの90があり、フォーカスが1行目の状態で閉じるボタンではスルーしてしまいます。
サブフォーム全体をチェックさせる事は可能でしょうか?
通報 ...
きちんと「クエリ1」に存在するフィールドを指定するだけでは?
質問文の状態では、「クエリ1」とは無関係の内容を抽出条件にしているので、「『クエリ1』とは無関係な内容の真偽によって、『クエリ1』の全件数または0どちらかの数値を得る」という計算になっています
サブフォームのリンク親フィールド、リンク子フィールドに「メインID」が設定されている状態でしょうか。
サブフォームのフォームヘッダーかフォームフッターにテキストボックスを配置して
下記のように設定します。
名前 サブチェック
コントロールソース =Sum([F1]=90+[F2]=90)<>0
Falseは0、Tureは-1なので、90の-件数になることを利用しています。
このようなことを使うのはちょっとという場合は、
コントロールソース =Sum(IIf([F1]=90,1,0)+IIf([F2]=90,1,0))<>0
hirotonさま:ありがとうございます。初歩的なミスをしてました。確かにそうですね、修正したら機能しました。フォームの入力内容とクエリ値がごっちゃになってました。
hatenaさま:ありがとうございました。なるほどです。ちょっとした事ですが中々思いつかないアイデアです。参考にします。