Sub SetFilter()
Dim stFilter As String
If Me.cbo内外検索 <> "" Then
stFilter = " And [内外]=[cbo内外検索]"
End If
If Me.cbo項目検索 <> "" Then
stFilter = stFilter & " And [項目]=[cbo項目検索]"
End If
DoCmd.ApplyFilter , Mid(strFilter, 6)
End Sub
Private Sub cbo内外検索_AfterUpdate()
SetFilter
End Sub
Private Sub cbo項目検索_AfterUpdate()
SetFilter
End Sub
Private Sub 所属部署タブ_Change()
If Me!所属部署タブ = 4 Then
Me!部署データ.Form.Recordset.AddNew
Else
If Me!部署データ.Form.NewRecord Then Me!部署データ.Form.Recordset.MoveFirst
Me!部署データ.Form.Recordset.Move 所属部署タブ - (Me!部署データ.Form.CurrentRecord - 1)
End If
End Sub
パスにコマンドとして認識されてしまうような文字が含まれている場合はパス全体を「"」ダブルクオーテーションで囲む必要があります
半角スペースが含まれてるパスなんかもよくあるパターンですね
分かりにくかったようですみません。実際に修正すべき部分だけを示すならば
です。前後の変更しない部分を表記したほうが分かりやすいかなと思ったんですが余計でした
解決してそうですがせっかくなので技術的な話を
DLookUpの第三引数にはWHERE句に相当する文字列を指定します。「文字列」なので実際に処理されるSQL構文を「"(ダブルクオーテーション)」で囲みます
今回の目的は「A10」を変数(フォーム上のテキストボックスの値)にしたいということなので、文字列の途中を抜き取るような形になります。元の文字列でそっくり残したい部分は前後に分割されて、それぞれで独立した文字列として「"」で囲みなおすことになります
そうして最後にそれぞれに分割した内容を文字列として連結するために「&」でつなぎます
結果
"[商品コード]='" & [商品コード] & "'"
更新削除が目的なら、連結フォームでやれば簡単ですが、非連結フォームでやる理由はなんでしょうか。
下記のように抽出条件を設定して開けば、目的のレコードが表示されます。更新削除フォーム側のコードは不要になります。
hatenaさま
ありがとうございました。'"&の使い方がまだいまいち混乱してしまいます。
オートルックアップクエリも参照させていただきました。
まだ難しいですが勉強してみます。
ありがとうございました😄
解決
クエリで日付フィールドの値が、今日の日付のものとNullのものを抽出したいということでしょうか。
日付の抽出条件欄に、
[Date] Or Is Null
でいいと思いますが、だめでしたか。
それとも、別の結果を期待していますか。その場合、どのような結果を期待していますか。
クエリの抽出条件は、日付フィールド以外に複数設定していますか。
現状のクエリのSQL文も提示してもらえますか。
①のSQLは「値集合クエリ」に設定しているということですか。
まず、このSQLの
Format(Year([満了日]) & "/" & Month([満了日]),"yyyy/mm")
は、
Format([満了日],"yyyy/mm")
で十分ですね。
②のコードは下記でいいでょう。
VBAのコードにSQL条件式を埋め込む場合は、引用符として'(単引用符)を使います。
詳細は下記を読んでください。
Access上のコード内で引用符(")と単引用符(')の使い分けについて - hatena chips
一応自分でも努力して。
例えば日付のところにLike""&[Date]&""とやったり。
[Date]Or Is Nullとか頑張りましたが。
ダメでした。
ヨロシクお願い致します。
Me
が使えるのは、はフォームかレポートのモジュールのみです。コードの記述してあるオブジェクトという意味です。フォームのコントロールソースプロパティでは使えません。大昔から現在まで使えません。
下記の式でいいと思います。
DLookUpは重いので、オートルックアップクエリを使うのをお勧めします。
ACCESSの基本技 オートルックアップクエリは超便利
オートルックアップクエリの利用 - もう一度学ぶMS-Access
追伸。フォームのプロパティソースにmeが使えないってことでしょうか?以前使った例を見たことある気がしますがバージョンによるものでしょうか?
ありがとうございます。
=DLookUp("[在庫数]","T01_商品","[商品コード]=& [商品コード] &)
ということでしょうか?
こちらもエラーになってしまいます。
よろしくお願い致します。
うまくいかないものでもいいので、現状のフォーム構成、VBAコードを提示してもらえますか。
それで、どこが「きれいに」いかないのか説明してください。
構文はVBAと同じで問題ないけどほとんどのキーワードは使えません
Meも使えないので単に
& [商品コード] &
と記述して参照しましょうりんごさん
こんにちは。コメントをありがとうございます。
また検証もしてくださったのですね。
解決策ですが、りんごさんも書かれていますように(hatenaさんが教えてくださった)
「クエリの結合プロパティを『T_顧客の全レコードと…』に変更する」で良いと思います。
(SQL的には内部結合から、T_顧客をメインとする外部結合に変更することになります。)
これで、担当者IDが空欄でも問題なく登録ができております。
取り違えていましたら申し訳ありませんが、ご返信までいたします。
担当者IDをDELETEして更新しようとするとエラーが出る、という事ですが、
クエリの段階でエラーを確認しました。
結合プロパティを変更すると、クエリとフォームでエラーが消失する事を確認しました。
解決策は、ごめんなさい、わかりませんでした。
迂回策ですが、此方、素人でパッと思いつくのは
担当者が未定の場合、空欄にして登録したい→担当者0(未定)を登録するみたいな感じか、
担当者が未定の場合、登録しない方向で、めっちゃ悩む感じか。
以下、駄文ですが
顧客テーブルの変更(顧客ID、顧客名)※担当者IDの削除
新しいテーブルの作成(顧客ID、担当者ID)
担当者テーブル(担当者ID、担当者名)
主キーどうする?、、、重複、ユニーク、、、
不一致クエリ、、、履歴どうする、、、そもそもテーブル設計的にどうなんだ?
>hatena様
ありがとうございます。
フォームでのエラーの件ですが、解決いたしました。
原因ですが、F_顧客のレコードソースが下記のSQLになっていました。
クエリの結合プロパティを変更したのは良かったのですが、フォームのレコードソースのSQLは以前のまま「INNER JOIN」になっていました。
このSQLの「INNER JOIN」を手動で「RIGHT JOIN」に変更、もしくはレコードレースに「Q_顧客」を設定することで、フォーム上でもエラーが出なくなりました。
当方の単純ミス&確認ミスで度々お手数をお掛けいたしました。
申し訳ありません。
今回の件は本質的には「クエリの結合プロパティの設定」に拠るものと分かりました。
色々と勉強になりました。大変ありがとうございました。御礼申し上げます。
別案「レコードソースにテーブルを設定&コンボボックスの値利用」もありがとうございます。
こちらでも問題なくできました。
状況によって、クエリVerと使い分けできそうです。
hatena chipsの方も時々拝見して勉強させて頂いています。有用な記事を惜しげもなく公開して頂いてとても参考になります。ありがとうございます。
そのようなフォームは普通によく作成しますが、そのような現象にあったことがないので不思議です。
解決策ではなく、別案の提案ですが、下記のようにしてみたらどうでしょうか。
フォームのレコードソースは、T_顧客 にします。
担当者ID のテキストボックスは右クリックして[コントロールの種類の変更]-[コンボボックス]でコンボボックスにします。
このコンボボックスのプロパティを下記のように設定します。
コントロールソース 担当者ID
値集合ソース T_担当者
列数 2
列幅 3cm;0cm
名前 cb担当者ID
「担当者名」のテキストボックスの設定を下記のようにします。
コントロールソース =[cb担当者ID].Column(1)
これで担当者名が表示できます。
これだとレコードソースはテーブルなのでエラーが出ることはないと思われます。
あるいは、下記で紹介しているような方法をつかってみるのもいいかと思います。
コードでも名称でも入力できるコンボボックス - hatena chips
>hatena様
お忙しい中、度々ありがとうございます。
はい。「フォームの担当者IDと結合したテキストボックスの規定値プロパティ」は空欄になっております。
困りました。どこがマズいのか、未だ検討がついておりません。。。
フォームの担当者IDと結合したテキストボックスの規定値プロパティの空欄になってますか。
>hatena様
お忙しい中、早々にご返信をありがとうございます。
全て試してみました。フォーム上では同じエラーが出てしまい、ダメでした。(しかしながら「Q_顧客」のデータシートビュー上ではエラーが出なくなりました。)
・「T_顧客」の「担当者ID」フィールドのプロパティで「値要求」は「いいえ」になってますか。
→はい。
・「規定値」は空欄になってますか
→はい。
・「クエリのデザインビューで結合線をクリックして、結合プロパティを表示させて、
「T_顧客の全レコードと・・・」というオプションを選択してください。」
→こちらは少し変化がありました。Q_顧客をデータシートビューで開いて、担当者IDを空欄にしても当該エラーは出なくなりました。しかし、フォーム上で空欄にしますと以前として当該エラーが出てしまいます。
・そのフォームでVBAが設定されてませんか。
→はい、VBAは記述しておりません。(検証用に新規DBも作成しまっさらな状態でテストしています。Accessが勝手に追加したacwwzlib, acwzmain, acwztoolモジュールはあります。)
クエリの結合線プロパティでInner joinからLeft Join等に変更できるのですね。SQLベースで考えるとこれで納得できます。大変勉強になります。ありがとうございます。
あとはフォーム上では何故かまだエラーが出ております。これが解消できれば良いのですが。
「T_顧客」の「担当者ID」フィールドのプロパティで「値要求」は「いいえ」になってますか。
「規定値」は空欄になってますか。
クエリのデザインビューで結合線をクリックして、結合プロパティを表示させて、
「
T_顧客
の全レコードと・・・」というオプションを選択してください。上記の点を確認ください。もし、それでも解消しない場合は、そのフォームでVBAが設定されてませんか。設定れていたら、いちどそれを削除してみて試してみてください。(コードはバックアップしておいてください。)
①②ともOKのはずですのでまずは試してみてください。
それでうまくいかなければ、その時にどのようにしてどのようにうまくいかないか質問してください。
早速のご回答ありがとうございます。
試す前に再度質問してしまい申し訳ないのですが、
この、Sub SetFilter()を使えば
①例えば項目を先に選択した状態で、結果を表示した状態で内外を選択しても有効でしょうか?
②実際はもっと選択肢が多い状態ですが、教えていただいた内容で適当な順番で選択肢分増やしていけば大丈夫でしょうか?
以上よろしくお願いいたします。
「別のコンボボックス」の名前を「cbo項目検索」、対象フィールド名を「項目」と仮定して。
色々とご検討いただいており、恐縮です。本当にありがとうございます。
ちょっと時間を見つけて試してみます。
お待ちください。
Access - 連動するコンボボックスについて|teratail
上記リンクで解決済みです。
遅ればせながらおっしゃっていることが把握できました。
連結フォームになっていないという初歩なミスでした。
ご指摘ありがとうございました。解決いたしました。
元の質問が埋もれてしまうので回答を別トピックに分離しました
→どんぐりずさんへ回答(タブ表示でレコード移動)
「F_メンバー」で表示しているレコードを削除しようとすると、ですよね?
やはり、こちらでは再現しませんでした(エラーメッセージが出ることなくデータを削除できました)
「移動ボタン」の件もですが、ちょっと想定できない動作をしているので、詳しく状況を合わせる必要がありそうです
試してほしいことですが、新規にフォームを作成して、この機能だけのフォーム・サブフォームにしたら同じ問題が発生しますか?
その他の追加分
回答
こっちは発生している問題が解決したら煮詰めるということで
情報不足していて済みません。
非連結で作成しています
結構大掛かりになってきたのですね。ちょっと一旦考え直してみます。ありがとうございます!
ちなみにこのとき、「移動ボタン」を表示していると1つ目のタブの状態でレコード2へ移動可能です。
コードを全て削除すると、1つ目のタブのみ表示される状態になりました。
回答の前に確認ですが、
「F_申請一覧」フォームは連結フォームですか、非連結フォームですか。
ラベルにデータを表示させているので、非連結フォームのようですが。
ちなみに、ハイパーリンク型フィールドの場合、# で区切った各セクションは下記の意味になります。
表示テキスト#リンクアドレス#リンクサブアドレス#ヒントテキスト
hiroton様ありがとうございます。
いただいた内容を確認してまいります。
新たに問題が発生しました。
こちらの「F_メンバー」を削除しようとすると
以下エラーが起きて削除できません。
実行時エラー 2101
プロパティの設定値として指定した値が正しくありません。
デバッグで指定される色が付くコードの部分は
me!所属部署タブ = 0
Access - 連動するコンボボックスについて|teratail
と同じ質問ですね。
そちらの方で回答してますのでそちらを参照してください。
ありがとうございます。
>編集する方法と謳う上記リンク先のようなことをしても編集できないということでしょうか?
はい。なお私がいじり回して分かったのは、
・「インポート操作の保存」は、システムテーブルへのレコード追加と関係が無いらしい。ウィザードで、例えば 1 フィールドでもデータ型を既定以外のものに指定すると、全フィールドについてレコードが追加されるらしい
・「1 フィールドでもデータ型を既定以外のものに指定」は、システムテーブルに間違いなく反映されている。が、その後ここを直接に修正しても、その修正は「保存済みのインポート操作」の実行で無視される
という感じです。
hatenaさん ありがとうございました、無事にできました。実は添付ファイルで作ってたらファイルサイズがとんでもないことになってしまいハイパーリンク型に変えていました。本当に助かりました。
せっかくなので少し調べてみました
「保存済みのインポート操作」の内容はImportExportSpecificationオブジェクトにXML形式で保存されているようです
ImportExportSpecification object (Access)