Access (VBA) |
![]() ![]() |
(Windows 10全般 : 指定なし)
フォームフィルターをボタンで再現
投稿日時: 23/08/27 22:32:17
投稿者: おーさん0729
|
---|---|
いつもお世話になっております。
|
![]() |
投稿日時: 23/08/28 16:59:13
投稿者: Suzu
|
---|---|
多くの要望がありますが、ご自身で、どこまでお調べになって、
|
![]() |
投稿日時: 23/08/29 00:35:21
投稿者: hatena
|
---|---|
引用: すでにSuzuさんから回答があるように、フォームフィルターと同じようなフォームを作成することになります。条件を入力するボックスはコンボボックスにするといいでしょう。 かなり面倒なことになりそうですので、フォームフィルターを使えばいいと私も思います。 フォームフィルターを呼び出すコマンドは下記ですね。 Docmd.RunCommand acCmdFilterByForm ただし、フォームフィルター画面になるとフォーム上のコマンドボタンは無効になるので、フィルター結果を反映させるには、リボンメニューか右クリックメニューで実行させることになります。 引用: Not (フィールター条件式) で選択を反転できるので、下記のような感じでどうでしょう。 Private Sub コマンド1_Click() Dim f As String f = Me.filter If Me.FilterOn And f <> "" Then If Me.filter Like "Not (*)" Then Me.filter = Mid(f, 6, Len(f) - 6) Else Me.filter = "Not (" & f & ")" End If End If End Sub |
![]() |
投稿日時: 23/08/29 16:29:06
投稿者: Suzu
|
---|---|
引用: これは、その選択をどの様に行うかに依ります 安易に考えれば、レコード 1件1件に、チェックボックスを用意し、そのチェックボックスにより選択を行う これは、レコードソースに、そのチェックボックスのコントロールソースとなる フィールドを用意する必要があります。 ちょっと特殊な方法としては 帳票フォーム/データシート内のセル範囲を選択し リボン/クイックツールバー に配置したボタンを押し、 VBAにて、選択レコードを特定し、選択対象から外す様にします。 ※一度に選択できるのは、連続したレコードのみで、飛び飛びのレコードを選択する事はできません ※フォームにボタンを配置すると、そのクリック時こ選択範囲が外れるので、 メイン/サブ形式 として、メイン側に配置 リボン等に配置 VBAを実行する様にする必要があります。 範囲選択されているレコード数を取得するには? https://tsware.jp/tips/tips_244.htm 後者は、特殊ですし、抽出の為の 文字列が長くなりがちになります。 何度も繰り返すと、文字数に制限のある Filter プロパティーに文字列を渡せない事にもなりかねません 前者の方が無難です。 |
![]() |
投稿日時: 23/08/29 19:59:30
投稿者: おーさん0729
|
---|---|
おーさん0729 さんの引用:Suzu さんの引用: |
![]() |
投稿日時: 23/08/29 20:04:16
投稿者: おーさん0729
|
---|---|
hatena さんの引用: ありがとうございます。これが知りたかったです。コマンドの呼び出し方とお聞きすればよかったのですね。 引用: ありがとうございます。これで反転はできました。 が、あとは、 引用: ですが、Suzuさんが書いてある方法 もしくは 今している方法くらいしかなさそうですね。 |
![]() |
投稿日時: 23/08/29 20:12:36
投稿者: おーさん0729
|
---|---|
追記です。
|
![]() |
投稿日時: 23/08/29 20:42:27
投稿者: hatena
|
---|---|
引用: FileMakerは触ったことがないのでよくわかりませんが、 「レコードの対象外」というのが、 カレントレコードを対象外(非表示)にするということなら、 主キーフィールドがIDで数値型と仮定して、下記のようなコードになります。 Private Sub コマンド1_Click() Dim f As String f = Me.filter If Me.FilterOn And f <> "" Then If Me.filter Like "Not (*)" Then Me.filter = "(" f & ") AND (ID <>" & Me.ID & ")" Else Me.filter = "ID<>" & Me.ID Me.FilterOn = True End If End If End Sub 引用: この場合、複数レコードはどのように指定することを想定してますか。 帳票フォームの場合、連続したレコードは複数選択可能ですが、とびとびのレコードも選択したいですよね。 例えば、チェックボックスを配置してチェックが入ったレコードを対象にするという感じでしょうか。 |
![]() |
投稿日時: 23/08/29 22:45:46
投稿者: おーさん0729
|
---|---|
[quote="hatena"]
引用: この認識で合ってます。 20/100を表示中に、カレントレコードを対象外にすると、1件減って19/100を表示することになります。 引用: 連続したレコードを選択する形です。 カレントレコードでボタンを押すと、メッセージで「○件対象外にしますか?」と表示して、入力した数字分をカレントレコードから対象外にする感じです。 また、反転+対象外の使い方をすることがあります。 具体的には、フィルター→20/100(表示)→反転→80/100(表示)→選択したレコードを対象外→79/100→反転→21/100という感じです。 (フィルターかけた)表示レコードに除外したレコードを足すといった感じですかね。 「フィルター」を使っている以上、両立できないような気がしてます...。 |
![]() |
投稿日時: 23/08/30 08:29:56
投稿者: Suzu
|
---|---|
1. 抽出条件を元に、更新クエリを発行し、チェックボックスの連結フィールドの値を True へ 更新
|
![]() |
投稿日時: 23/08/30 08:37:32
投稿者: Suzu
|
---|---|
複数人 同時 使用前提の場合
|
![]() |
投稿日時: 23/08/30 09:11:56
投稿者: Suzu
|
---|---|
あれ、、、
|
![]() |
投稿日時: 23/08/30 12:23:40
投稿者: hatena
|
---|---|
おーさん0729 さんの引用: 帳票フォームでレコードセレクターをドラッグするあるいはShiftキーでクリックで複数選択して、その選択レコードを対象にするということではなく、 インプットボックスで件数を入力させて、カレントレコード以降その件数分を対象にするということでしょうか。 対象レコードの主キーの値を取得して、それもとに条件式をFilterに追加すれば可能でしょう。 前者の場合は、コマンドボタンだと、複数レコード選択が解除されますので、ラベルクリックで代用するなどの対策が必要です。 対象の主キーの値を取得する方法はRecorsetプロパティのレコードセットをループさせることで可能です。 下記のような条件式をFilterプロパティに追加すればいいでしょう。 (Filterプロパティの条件式) And (ID Not In (3,5,7,9)) IDが 3,5,7,9 のレコードを除外 おーさん0729 さんの引用: 前にも回答した反転方法で可能です。 79/100→反転→21/100 なら 79/100 の条件式を Not (条件式) とすることで可能です。 |
![]() |
投稿日時: 23/09/03 18:15:51
投稿者: おーさん0729
|
---|---|
Suzu さんの引用: 覚えてくださり、ありがとうございます。以前の質問時より開発状況はほぼ変わっておりません... サーバーのテーブルの主キーをローカルに落としこんで、 その主キーにチェックボックスをくっつけたものをテーブルにして、 そのチェックボックスで、表示を操作してました。 が、ローカルに落とし込んでるので、サーバーデータが追加削除されると反映されないのです。 (一人ならもちろん問題なし。複数人なら、です) なので、基本に帰って、検索方法(フィルター)を何とかできないかなーが今回の質問につながります。 |
![]() |
投稿日時: 23/09/03 19:19:04
投稿者: おーさん0729
|
---|---|
hatena さんの引用: 一度フィルターをかけて、そこから絞り込み?をするイメージですかね? 今のフィルターの条件に付けたす感じですよね? 引用: 上記の反対を行うという理解をしました。 試してみます。 ありがとうございます。 |
![]() |
投稿日時: 23/09/04 10:00:35
投稿者: Suzu
|
---|---|
引用: 以前の話 に立ち戻って 同じ話をしている様にお見受けしますので、その辺は察しています 引用: 自動更新。 言葉だけなら、良い様に聞こえます。 その画面から、次の業務フローへ続きませんか? ユーザーは、画面で問題が無い事を確認しました。 でも、確認が終わったのに、確認していないデータが現われました。 ユーザーは、確認が終わったつもりで、確認を行っていないレコードを含め次のフローへ進みます。 本当にそれで良いのでしょうか? 同じ条件で、レポート印刷しませんか? 確認が終わっていない・終わったレコードを含め 印刷が行われる事になりませんか? これを防ぐには、各レコードの状態を示すフラグを持たせる必要があります。 画面の 表示のしかたひとつで、全体フローが変わりえます。 そう言う事も考慮し検討しましょう。 その場しのぎで、GUIを考えず、 全体を含め業務フロー、各レコードの状態、ユーザーが行うべき処理 をきちんとふまえ システム設計を行いましょう。 |
![]() |
投稿日時: 23/09/10 17:49:50
投稿者: おーさん0729
|
---|---|
ありがとうございます。
|