Private Sub btn物件_Click()
If Not IsNull([txt物件ID]) Then
DoCmd.OpenForm "F_物件管理", acNormal, "", "物件管理ID In (SELECT 物件管理ID FROM Q_サブ物件 WHERE 区分NO = " & Me.txt区分NO & ")", , acDialog
Else
DoCmd.OpenForm "F_物件管理", acNormal, , , acFormAdd
End If
Public Function Titleph(txtbox As control, placeHolder As String)
If txtbox.Value <> "" Then
Titleph = txtbox.Value
Else
Titleph = placeHolder
End If
End Function
SELECT
ID,
Max(Choose([tblA].[SEQ],[A1],[A2],[A3])) AS Max_A,
Max(Choose([tblB].[SEQ],[B1],[B2],[B3])) AS Max_B
FROM
テーブル名,
tblSeq AS tblA,
tblSeq AS tblB
WHERE
Abs(Choose([tblA].[SEQ],[A1],[A2],[A3])-Choose([tblB].[SEQ],[B1],[B2],[B3]))<=100
GROUP BY
ID;
なるほど!解決しそうです!
混乱して要らぬ情報まで書いていたようです。
ありがとうございました!
考え方自体は「
[契約状況]<>"契約中"
」という並べ替え用の式(フィールド)を作って「最新契約満期日」よりも前に指定してあげればいいです並べ替えの設定はフォームの並べ替えプロパティでやっているのかな?
ならばそのまま次の形で
帳票フォームの詳細セクションにサブフォームは配置できないはずですが。
言葉での説明が難しいなら、現状のフォームのスクリーンショットを提示できませんか。
あと、「契約フォーム」の並び順についてで、クエリで並び順を設定しているなら、そのフォームのレコードソースのクエリのSQL文を提示してください。
>「契約リストフォーム」の中で「契約フォーム」のレコードが並んでおり
契約リストフォームは帳票です。
わかりづらくてごめんなさい。
「契約リストフォーム」の中で「契約フォーム」のレコードが並んでおり
「契約フォーム」の中に「サブ契約フォーム」が並んでいます。
今回悩んでいるのは「契約リストフォーム」の中の「契約フォーム」の並び順です。
現状の並び替えは「最新契約満期日」のみとしており、特にSQLは利用していません。
「契約リストフォーム」というのは、契約フォームの中のサブフォームということですか。
そのサブフォームのレコードを並び替えたいということですか。
現状、並べ替えはレコードソースのクエリに設定していますか。
もし、そうなら、そのクエリをSQLビューにして表示されるSQL文をコピーして貼り付けてもらえますか。
うまくいきました。ありがとうございます。
やはりそこでしたか…助かりました。ありがとうございました。
とりあえず
ならSQLでも文字列が指定されている必要があります
区分NO = " & Me.txt区分NO & ")"
↓
区分NO = '" & Me.txt区分NO & "')"
ちなみに「btn物件」を配置しているフォームは、また全然別のフォームです。
すみません、間違って投稿してしまいました…
下記のコードを作りましたがうまく作動しません。
メインフォームのレコードソースのテーブル名(orクエリ名)Q_物件管理
それの主キーと主なフィールド名、 物件管理ID(主キー)、オーナー情報など
サブフォームのレコードソースのテーブル名(prクエリ名) Q_サブ物件
それの主キーと主なフィールド名 物件ID(主キー)、区分NO、住所など
また、サブフォームコントロールのリンク親フィールド、リンク子フィールドの設定 物件管理ID
区分NO(短いテキスト)で検索したい。
何が間違っているのか、教えていただけると助かります。
少し前の質問になりますが、うまくいかないため改めて質問です。
あっ(汗)、修正しておきました。
うまくいきました。(ちなみにもう1か所Mtxtboxのままになっている部分があるようです)
大変勉強になりました。応用して、他でも色々作れそうです。ありがとうございました。
Titlepath は Titleph に修正済みとして、その前の全角の
=
を半角の=
に変更してください。(前の私の回答も全角になってましたので修正しておきました。)
=Titleph([名前],"名前")
タイプミスでした。txtboxが正しいです。回答も修正ておきます。
テキストボックスのコントロールソースの設定は下記です。
[名前]の[]内はテキストボックスの名前、"名前"の部分はうっすらと表示させたいテキストです。
コントロールソースが間違って「Titlepath」になっていたことに気づきました…「Titleph」に変更したところ、エラーが「#Type!」になりました。度々すみません。
失礼しました。コントロールソースの自動変換後は下記になります。
早速ありがとうございました。
上記VBAをコピーして、コントロールソースは「名前」の部分だけ変えて実装してみましたが
「#Name?」と表示されます。
色々試してみたこととしては、「Mtxtboxをtxtboxに変える」(宣言での変数と文中での変数が異なっていていいのかわからず??)「標準モジュールにおいたり、該当のフォームのモジュールにおいたり」です。
ちなみに、コントロールソースは自動で下記のように[]がついておりました。
==Titlepath
何か勘違いしておりますでしょうか?
汎用関数は、
テキストボックスのコントロールソースに、下記のように設定することになります。
=Titleph([名前],"名前")
ちなみに下記のような形ではうまく行きませんでした
初心者で恐れ入ります。
ありがとうございました。早速今日、実装予定です。
ところでこういったコントロールソースやクエリデザインで使う式なども
汎用関数を作って対応することはできますでしょうか?
もし使えるという場合、逆に使えない場所があれば教えてください。
前のスレッド、いま見直してみたら、ちょっと間違ってますね。
メインフォームの更新前処理で最新日を更新してますが、サブフォームで更新してもメインフォームの更新前処理は発生しないので、サブフォームの更新後処理でメインフォームの最新日を更新すべきですね。
メインフォームの更新前処理のイベントプロシージャを削除して、サブフォームの更新後処理に下記のコードを記述してください。
よくわかりました。活用させていただきます。
戻るレコード数はサブフォームに表示されている行数にしてください。
なるほど、それがシンプルでいいですね。
単票フォームならいいですが、帳票フォームだとカレント行以外にも影響を与えるので、それを考慮すると難しい。条件付き書式で文字色を白(背景色と同じ)にすることになるかな。下記の応用で。
カレント行の背景色の変更 - hatena chips
フォーカスのあるテキストボックスは背景スタイルの「透明」が無効になるので「名前」テキストボックスを最前面へ移動して背景スタイルを「透明」にしてあげればVBAはいらないかなと
1文字でも入力したら~を実現しようと思ったらEnterでNullなら幅0、文字入力orExitで幅を戻すとかする感じですかねぇ。労力に見合った感じはしないですね
1文字でも入力したらというのは難しいですが、薄く表示させておいてフォーカスが来たら消えるという仕様なら下記の方法で可能です。
「名前」テキストボックスの上に重なるようにテキストボックスを配置して下記のように設定します。
=IIf([名前]<>"","","名前")
フォーカス取得時のイベントプロシージャを下記のように記述します。
以上です。
kitasue様
ご回答ありがとうございます。
上記内容で運用できそうです!
ありがとうございました。
ありがとうございました。フッターを使ったことがなかったので、参考になりました!カレンダーも別の場所で使用したいと思います。
「折りたたんで表示」というのがどのようなものなのかよく分からないですが、
ボタンをクリックすると高さが拡張して全体が表示されるというイメージでしょうか。
だとするほぼ不可能だと思います。
自分がするのは、備考フィールドだけフッターに配置して最初から高さを高くしておくことぐらいですね。
あとは別フォームに表示させるぐらいかな。
カレンダーダイアログ日付入力関数の改良版 - hatena chips
上記では帳票フォームの日付テキストボックスのすぐ下にカレンダーフォームを表示させるというテクニックを使ってますが、これを応用して、備考テキストボックスのすぐ下にテキストボックスをもつフォームを表示させるということはできると思います。
WinAPIを使ってますのでお手軽ではないですが。
エラー出力ではなく、Null出力でよろしければ、先程のSQL文をクエリ「Q1」として登録して
で、いかがでしょうか。
フィルタ用のテキストボックス、コンボボックスが空白の時の処理を考える必要があります
VBAの場合、
この形で「そもそもフィルタリングしない」を選べますが、クエリデザインの場合「必ず何かしらの抽出条件を設定する」ことになるため任意のフィールドでフィルタリングするようなのはひと手間必要です
■コンボボックスが片方空っぽでも(魔法使いの開発工房さん)
または、Nullを許可しないフィールド限定になりますが
というような方法もあります
そもそもNullを抽出したい場合には
Is Null
と指定する必要がある。なんかもVBAなら柔軟に処理できるメリットがありますね慣れの問題なのでどちらが楽かとは一概に言えないですが、余計な処理をしない点でVBAのほうがより良いものです
ごめんなさい。エラーは返さずオミットしてしまいますが、以下でどうでしょうか。
テーブル「tblSeq」を追加します。フィールドは、「SEQ」一つで内容は、
SEQ
1
2
3
の3レコードです、その上で、
のSQLで行内のAの最大値とBの最大値を出力します。
詳しく教えていただき、ありがとうございます!
じっくり確認させていただき、不明点があった場合は改めて質問させていただきます。
③の質問については、hatena様のVBAで作成できますよね…大変失礼いたしました。VBAで実行可能なことは承知の上で、1個質問です。
クエリデザインで作成することは可能でしょうか?不可能であれば諦めがつくので教えていただけると幸いです。可能だとすると、コンボボックスに工夫が必要になりますでしょうか。だとすると、VBAのほうが楽でしょうか。
※帳票スタイルのリストに対して、フィールドごとにコンボボックスがあり、複数の絞り込み条件を重ねる際、クエリデザインで設計できるか?という質問です。わかりづらくてスミマセン
kitasue様、
御返事ありがとうございます。一例で入力したため、数値を良く確認しておりませんでした。
100以下にならない場合はエラーを返してほしいなと…
エクセルでやれと言われそうですが何卒宜しくお願い致します。
ID=3では、差が100以下にならないのでは。
イメージしてるものに齟齬があるような気がしないでもないですが
hatenaさんのブログのサンプルを例にとるならば
="社員コード"&IIf([txt社員コード]<>"","▼","▽")
や
="フリガナ"&IIf([txtフリガナ]<>"","▼","▽")
みたいな感じです。フィルタをかけているフィールド(列)は「▽」が「▼」になって区別できるという仕組みです
フォーカス取得時はEnterですねGotFocusでもほぼ変わらないのでどちらでもいいですが
ちょっと質問の内容が理解できていません。フィルタの仕組み自体はhatenaさんのブログにあるような、フィールド(列)毎にフィルタ用のテキストボックス(またはコンボボックス)を用意するというだけのものです
この方法の問題点
フォーカスのあるコントロールは最前面に表示されるという仕様を使っているので期間指定(min、maxでテキストボックスを2つ用意したい)みたいなのはどうしたもんかとなります
▽(▼)について
上で軽く触れましたが、フィルタの内容を入力するテキストボックス(コンボボックス)は基本的にフィールド(列)のラベルに隠れた状態になるのでフィルタを適用しているフィールド(列)がどこなのかぱっと見でわかるようにするためのものです。この部分だけ独立させるとサイズやフォントを変えたり右端に寄せたりしてもう少しExcelっぽくできそうな気もします
条件付き書式を使ってみるという手もあるかもしれません
VBAの実装について
フィールド(列)のラベルとして使うコントロールを例えば「列ラベル_txt社員コード」のようにしたとすると
のようになりますが、コントロール数分記述するのは手間だしVBAコードが見づらくなります。フィルタの内容を入力するコントロールを例えばすべて「フィルタ_○○」のように統一して
のような関数を作るとフォーカス取得時イベントに[イベントプロシージャ]を指定してコードを記述する代わりに
=setFocusFilterControl()
を設定するだけで済むのでいろいろはかどります2種類、検索をヘッダーに作りたいページがあり、1つはhatena様に教えていただいた方法、もう1つはコンボボックスが多いのでhiroton様に教えていただいた方法を使わせていただくことにしました!
そこで質問です。
①「="ラベル名"&IIf([フィルタ用]<>"","▼","▽")」なのですが、
フィルタ用の部分は何を指定するイメージでしょうか。
わからず…スミマセン。
②「フォーカス取得時にフィルタ用にSetFocus」という意図は
下記ですよね。
'''Private Sub txt検索_GotFocus()
Me.cbo検索.SetFocus
End Sub
'''
③絞り込みは重ねていくことはできますでしょうか。
色々聞いてスミマセン。宜しくお願いいたします。
Accessではたいていのことはクエリのデザインビューでできますが、サブクエリとかユニオンクエリなどを使えるようになるにはSQLの理解は必要ですね。