Private Sub cb月_AfterUpdate()
Dim BeginDay As Date
BeginDay = DateSerial(Me.cb年, Me.cb月 - 1, 21)
Me.Filter = "売上日>=#" & BeginDay & "# AND 売上日<#" & DateAdd("m", 1, BeginDay) & "#"
Me.FilterOn = True
End Sub
Private Sub cb月_AfterUpdate()
Dim BeginDay As Date
BeginDay = DateSerial(Me.cb年, Me.cb月, 1)
Me.Filter = "売上日>=#" & BeginDay & "# AND 売上日<#" & DateAdd("m", 1, BeginDay) & "#"
Me.FilterOn = True
End Sub
サブフォーム内のコード
Public Sub Form_AfterUpdate()
Me.Requery
Dim maxDate
maxDate = DMax("年月日", "T管理", "管理ID=" & Me!txt管理ID)
If Me.Parent!年月日new = maxDate Then
Else
Me.Parent!new = maxDate
End If
End Sub
フィルタにはSQLのWHERE句に相当する文字列を指定します
WHERE句の書き方参考:【SQL入門】WHEREで検索条件の指定方法をわかりやすく解説
組み合わせてどんなデータを表示したいのかによってANDでつないだりORでつないだり、NULLのデータで絞り込みたいのであれば
[フィールド] IS NULL
とする必要がある。あたりを抑えておけば最低限の記述はできるようになります少し加えるだけで出来てしまうのですね。ありがとうございました。
次はオプショングループに挑戦してみたいと思います。
ありがとうございます!!Me.Filterでできました。思っていた通りになりました!!
ありがとうございました。
「月」コンボボックスの更新後処理のイベントプロシージャを下記のように変更すればいいでしょう。
まず、それ自体を表示することが目的なら、フィルタの内容を変えてからボタンを押すまでフォームの表示内容と乖離してしまうのでワンステップ置くような仕組みはオススメしません
別な場所に値をコピーしたいという用途ならそのテキストボックスの値を取得すればいいでしょう(テキストボックスは非表示でもかまいません)
フィルタの実行と同時に取得したい(しかもその処理が結構重い)とかだと、
total = Me!○○フィールドの合計
の処理がうまくいかないこともあるようなので、そういう時ならばDSum関数を使って第三引数でフォームのフィルタと同じ条件を指定すればいいでしょうできましたありがとうございます。これなら年も設定できるので楽になりました。
余談で少し質問なのですが何日から何日までという設定も月の中で設定できるものなのでしょうか
1月というコンボボックスで12/21~1/20までを表示のような。
ご教授ありがとうございます。できました。
が、この機能をボタンを押したときだけ集計するようイベントプロシージャを記述したいのですが、VBAで同じものを記述すると機能してくれません。どうすればよろしいでしょうか。
ご教授ありがとうございます。できました。
が、この機能をボタンを押したときだけ集計するようイベントプロシージャを記述したいのですが、VBAで同じものを記述すると機能してくれません。どうすればよろしいでしょうか。
この手のテーブル設計は、運用実態によって最適な設計は変わりますし、絶対的にこれだと決まるものでもないし、設計者の考えかたによっても設計は千差万別になります。
まずは、現状のテーブル名、フィールド構成、主キー設定を提示してもらえますか。
フォームのFilterプロパティにVBAで抽出条件を設定するようにすればいいでしょう。
UIとしてはコマンドボタンより、コンボボックスで月を選択するようにするか、オプショングループ内にオプションボタンかトグルボタンを配置する設計にした方かいいでしょう。
まずは、コンボボックスの方が簡単なのでコンボボックスで作成してみて、うまくいったら、オプショングループに挑戦するのがいいでしょう。
まずはコンボボックスの方法を提示しておきます。
月間請求書履歴が帳票フォームとして、レコードソースに「売上日」という日付/時刻型のフィールドがあると仮定します。
「年」選択用のコンボボックスと「月」選択用のコンボボックスを配置します。
「年」コンボボックスを下記のように設定します。
名前 cb年
既定値 =Year(Date())
値集合タイプ 値リスト
値集合ソース 2018;2019;2020;2021;2022
「月」コンボボックスを下記のように設定します。
名前 cb月
既定値 =Month(Date())
値集合タイプ 値リスト
値集合ソース 1;2;3;4;5;6;7;8;9;10;11;12
「月」コンボボックスの更新後処理のイベントプロシージャに下記のように記述します。
「年」コンボボックスの更新後処理とフォームの読み込み時のイベントプロシージャを下記のように記述します。
以上です。
単にテキストボックスのコントロールソースを
=Sum([フィールド名])
とすればフォームのフィルターに合わせて自動で計算できますよありがとうございます。勉強になりました。参考にさせていただきます。
現状はどこまでできていますか。
テーブルは作成しましたか。
それとも、まったく手付かずですか。
下記のSQLで組毎の標準偏差と平均を取得できます。
これを Q_標準偏差_平均 と名前を付けて保存します。
次にこのクエリとテーブルを使って下記のSQLで偏差値が求められます。
フォームが最大化されているということではないですか。
それかデザインビューでのフォームの幅と高さが画面サイズより大きいとか。
「作業ウィンドウ固定」「ポップアップ」の設定が関係するとは思えないのですが。
具体的にどのように反映させようとしているのですか。
具体的に説明してください。
返信遅れて申し訳ありません。
テーブル名
MT_テスト
主キー ID オートナンバー型
組 短いテキスト
名前 短いテキスト
点数 数値型
標準偏差 数値型
偏差値 数値型
何卒宜しくお願い致します。
ポップアップをはい、作業ウィンドウ固定をはいにしていたのですが、2つ問題が発生しました。
①上記の条件でもウィンドウが画面いっぱいに広がって、フォームのサイズをマウスで変更できないフォームがある。
②上記の条件だと詳細フォームを閉じたとき、リストフォームに情報が反映されないで困るフォームがある。
以上、対応策があればご教授お願いいたします。
現状のテーブルの名前、フィールド構成、主キー設定を提示してください。
フォームのレコードソースはクエリですか。
クエリなら、そのクエリを開いてそこで更新はできますか。
あとは「最適化と修復」を実行してみて改善しませんか。
SQLをご確認いただき、ありがとうございました。大変お手数をおかけいたしました。
デバッグはまだ行っていないのですが、とりあえずは、サブフォームのヘッダーに更新ボタンを置いて対応することにしました。
SQL文を拝見しましたが、特に問題はなさそうです。
こうなると、デバッグ作業をすることになりますが、実ファイルのないこちらでは無理です。
下記のリンク先を参考にステップ実行によるデバッグ作業を行ってください。
最も基本的なステップ実行 - Excel VBA
テーブルにしてみたところ、リンクが切れている部分についてのエラーは出ましたが、それ以外のエラーは出ませんでした。SQL文ですが、そのまま掲載するのもちょっとあれなので、お送りさせていただきますね。ありがとうございます。
クエリのデザインビューで下記のように設定してください。
あるいは、
前者は[tgl_生死]が押されてないときに、
「生死」がNullのレコードが、前者は表示されますが、後者は表示されません。
エラーメッセージから推測すると、サブフォームのレコードソースのクエリに問題があるように思えます。
サブフォームのレコードソースをクエリではなくテーブルにしたらどうなりますか。
それでエラーが出ないなら、クエリに問題があるということになります。
その場合は、現状のクエリのSQL文を提示してください。
ありがとうございました。解決しました。
ありがとうございます。再確認しました。サブフォームコントロール名で間違いありません。サブコントロール名とサブフォームコントロール名が同じものに設定されていたので、試しにさぼフォームコントロール名を変更して試してみましたが、エラー発生状況は同じでした。
おっしゃるとおり、デバックボタンを押すと該当の行が反転される状況です。
はい、その通りです。
Windowmode:=acDialog を指定して(ダイアログモードで)開くと、開いたフォームを閉じるまで次のコードに進みません。
閉じた後に次のコードが実行されます。
「実行時エラー2471 クエリパラメーターとして指定した式でエラー'年月日'が発生しました」というエラーが出たときに、デバッグボタンをクリックするとその行が反転表示されるのですか。
念のために確認ですが、上記の「Fサブ管理」というのはサブフォームコントロール名ですか。
サブフォーム名とサブフォームコントロール名は別物です。
サブフォームとサブフォームコントロールの違いとは? - hatena chips
ご教示ありがとうございます。今回の件は、メインのパソコンから手動で操作します。システム移管中でして少しの間だけの対処法でしたので。また、宜しくお願い致します。
ご確認ありがとうございます。
エラーが出るコードはここになります。
ありがとうございます。そこまで考えが及びませんでした。
スミマセン、F管理を閉じるとき、F管理総合をrequeryしないといけないと思っていたのですが、教えていただいた内容だとF管理を開くときにrequeryしているようです。
ダイアログだと閉じるときrequeryになるということでしょうか?
Forms!F管理総合 と 他フォームが同時に開いていることがないということが保障されていればいいですが、
もし、同時に開いていて、他フォームから「F管理」を呼び出したとき、意図しない動作になる恐れがあります。
現状、同時に開くことがなくても、将来、機能を追加したり、仕様変更でそうならないとも限りません。
自分がするなら、「F管理」をダイアログモードで開いて、「F管理総合」の方で自身を再クエリするという方法を使いますね。
「F管理総合」のモジュール
「F管理」のモジュール
ご参考までに。
そのエラーがでるコードはどこですか。
On Error Resume Nextを使えばいいですね。解決しました。
ありがとうございます。大変参考になりました。
しかし、今回のコードのせいかエラーが出ます。
「実行時エラー2471 クエリパラメーターとして指定した式でエラー'年月日'が発生しました」
エラーを発生させない方法はありますでしょうか。
サブフォームのモジュールの
の
Private
をPublic
に修正メインフォームのコマンドボタンのクリック時を下記のように記述
リボンの[ファイル]→[オプション]クリックで[Accessのオプション]ダイアログが開く。
[クライアントの設定]→[フィールド移動の動作]で
[フィールドの先頭に移動]または[フィールドの最後に移動]を選択すればいいでしょう。
なるほど!背面に置く発想がありませんでした。また、わかりやすいように背景色を統一するのも参考にさせていただきます。教えていただき感謝です。
Djoin("従業員名","T_従業員","部署ID=" & Nz([T_従業員]![部署ID],-1))
でどうでしょうか。-1 は存在しないIDならなんでもいいです。