しかし、当初の他の条件と重ね合わせる部分がうまくいきませんでした。
以下コードで確認してみると
Debug.Print Mid(strFilter, Len(" AND ") + 1)
顧客ID = 123 AND 担当ID = 23 AND 伝票NO="001" Or 伝票NO="002" Or 伝票NO="003"
とイミディエイトウィンドウに表示され、伝票NOの3つしか表示されません。
カレントレコードとは現在選択中のレコードです DAO レコードセットからレコードを削除する
カレントレコードを削除した状態で再度(カレントレコードを)削除しようとすれば当然「カレントレコードが存在しません」となります。時々ということは他の処理の影響でカレントレコードが移動しているのでしょう(エラーが出ないほうがたまたまうまく動いているというだけです)
Public Function myFormOpen( Optional formName As String)
DoCmd.OpenForm IIf( formName <> "", formName, CodeContextObject.ActiveControl.Caption ), , , , ,acDialog
End Function
クエリのSQLビューにstrSQLの内容を貼り付けた場合は正常に表示されますか。
下記のコードを実行するとイミディエイトウィンドウにstrSQLの内容が出力されますのでそれをコピーして貼り付けるといいでしょう。
ブラウザのアドレス欄に直接そのURLを入力した場合は、開けますか。
開けるなら、下記の方法を試してみてください。
【VBA】ブラウザを起動し指定URLを表示する | 自恃ろぐ-jizilog.com-
列詰めはコントロールの移動が必要なので、VBAでやるのがシンプルだと思います。
クエリでやろうと思えばできないことはないですが。
下記はレコードソースがクロス集計クエリで列数が変化する場合のサンプルです。
列数が変化するクロス集計クエリと連結するフォーム - hatena chips
フォームですが、レポートでも同じ方法で可能です。
いずれもできるとのことで、嬉しくなりました!
①VBAでチャレンジしてみたいと思います。
参考サイトを探し、不明な場合はまた質問させていただきます。
②行を詰めるのと同じでプロパティでも可能でしょうか。今から作成に取りかかっていきたいと思います。
xls形式なら、レポートのプレビューからExcelに出力できますよ。
レポートは(*.xlsx)ファイル形式に出力できない | Access 2013 | 初心者のためのOffice講座
ただし、レポートの体裁がそのまま正確に再現できるかどうかは分かりません。
VBAを使えば簡単ではないですが、何でもできます。
それなりのスキルは必要です。
可能です。
いろいろ方法はあります。
ありがとうございます!式を修正し、うまく動くようになりました。
ANDとORではANDの方が優先順位が高いので上の式だと下記のように評価されます。
演算子の優先順位 | Microsoft Docs
伝票NO の OR を先に評価させたい場合は()で囲むようにします。
表示順が前後されてしまいましたが、試してみた結果新たに生まれた問題点を上の4に記載しております。。
申し訳ございませんが、ご確認をお願いいたします。
早速試し、上記の件についてはうまく行くことを確認いたしました!感謝です。
顧客と担当で絞ったときはうまく表示されます。
度々申し訳ございませんが、ご教示宜しくお願いいたします。
なるほど!ありがとうございます!
後ほど試してみます!ありがとうございました😊
というような条件になると、伝票番号が001かつ002かつ003のレコードを抽出という意味になりますが、それに該当する伝票はないですよね。(一つの伝票には一つの伝票番号しかないので)
伝票番号が001または002または003のレコードを抽出ということがご希望のことだと思いますので、イミディエイトウィンドウの結果が下記のようになるようにコードを修正しましょう。
ちなみに、In演算子を使って下記の式でも上記と同じ結果になりますので、下記のようになるようなコードでもOKです。
ご丁寧かつ迅速なご返答をありがとうございます。
ご指導いただいたように試してみたいと思います。
またわからなかったら、質問させてください。
ありがとうございます。
ちなみに、1つの伝票番号のみだと検索ができます。複数入れると何も検索できません。
うまくいくようになりました。ありがとうございました。
クエリが絡むデータは、requeryを使わないといけないんですね。
ようやくスッキリしました。感謝いたします。
詳しくありがとうございました。プリントして保存し、今後じっくり理解していきたいと思います。仰るとおり、結局4の方法で対応いたしました。
2番目のリンク先を参考にして、コンボボックスから直接値リストを表示できました!ありがとうございます。
値リストの場合なら、「値リストの編集の許可」を「はい」にすると編集することができます。
■T'sWare Access Tips #484 ~ユーザーが値リストを変更できるようにするには?~
■T'sWare Access Tips #631 ~リスト項目編集後の保存確認メッセージを出さないようにするには?~
「ちょっと怖い」というのはコード自体に危険性があるということではなく感覚的にメインフォームのレコードが削除されてしまうという誤解をしかねないという意味です。
サブフォームがデータシートビューの時はメインフォームに配置するしかないと思います。その場合はコマンドボタンのキャプションをサブフォームのデータの削除だと明確に分かるようにしておくといいでしょう。
帳票フォームなら詳細セクションに削除ボタンを配置するがいいのではと思います。どのレコードを削除するのか明確になりますので。
データシートビューの場合も、非連結のテキストボックスを配置して、コントロールソースに ="削除" と設定して、クリック時(またはダブルクリック時)のイベントプロシージャにレコード削除のコードを記述すれば可能です。
やはり無理なのですね。
サブレポートの方向で考えたいと思います。
ありがとうございました。
コードはコピペするようにしてください
Forms!F診断リスト.refresh
↓
Forms!F診断リスト.Requery
ではどうですか?
Form.Refresh メソッド (Access)
Requery メソッド (Access)
カレントレコードとは現在選択中のレコードです
DAO レコードセットからレコードを削除する
カレントレコードを削除した状態で再度(カレントレコードを)削除しようとすれば当然「カレントレコードが存在しません」となります。時々ということは他の処理の影響でカレントレコードが移動しているのでしょう(エラーが出ないほうがたまたまうまく動いているというだけです)
リンク先にある通り
のようにカレントレコードを移す処理を入れてあげればエラーは出ないと思います
ありがとうございます。
昨日書いたあとも削除を何度も試していて、動きが不安定なので(ちょいちょいエラーになる)この機能は取り外そうかと悩んでいました。
最新のレコードから順に消すとエラーが出ない気がしたんですが…エラーが出る法則まではわかりませんでした。
サブフォームがデータシートビューのものと、帳票だけどヘッダーがフィールドタイトルの罫線区切りで埋まってるものの2種類があり、それについては削除ボタンの配置をメインフォームにしていました。
〉ちょっと怖い
危険性があるなら外そうと思います!
チェックボックスをつけて削除クエリで処理するようにしたいと思います。
アドバイスありがとうございました!
下記で回避できそうな気がします。
しかし、
そもそも、この仕様が無理があるように気がします。
サブフォームのレコードを削除するならサブフォームに削除ボタンを置いた方が自然ではないですか?
メインフォームに削除ボタンがあるとメインフォームのレコードごと削除されそうな気がしてクリックするのがちょっと怖いです。
マウス移動も大きくになりますし。
ちなみに、前期のマクロをVBAに翻訳すると下記のよにうなコードになります。
マクロだと下記の画像のようにすればいいでしょう。
マクロでやりたいですか。
VBAはわかりますか。
そろそろ、マクロからVBAへ移行しようという気持ちはありますか。
今回の質問内容から判断するにそろそろVBAへ移行すべきレベルにきているように感じます。
このコードで続けざまにサブフォームのレコードを選択して(どこかのテキストボックスにカーソルを置いて)削除を実行していると、時々「カレントレコードが存在しません」というデバッグエラーが発生します。
何か解決方法はありますでしょうか。
ネットで検索したコードで削除処理しておりましたが、教えていただいたコードで解決しました。ありがとうございます。
それぞれのテーブルの主キーはどれですか。また、テーブル1、テーブル2というのは実際のテーブル名ですか。テーブル名は内容を表すものにすべきです。
あと、それぞれのテーブルのデータ例も提示してもらえませんか。
フィールド名だけではどのようなデータなのか、データ間でどのような関係があるのか分かりません。
あと、担当者とは、何を担当するのですか。顧客毎に担当者が決まっているのか、グループ毎なのか、それによってもテーブル設計が異なってきます。
左右で行の高さがちがうのですね。それなら、リンク先の方法では無理です。
それぞれのレポートを別に作成して、サブレポートしては埋め込んでください。
テーブルはたぶん、伝票のヘッダー部分のテーブルと明細部分のテーブルがあると思いますので、ヘッダーテーブルをメインレポートのレコードソース、明細テーブルをサブレポートのレコードソースとすればいいでしょう。
返信ありがとうございます。
ページ全体の罫線の配置を左右別々に設定してみました。
しかし、詳細に設定している印字データの高さが左右で違うため、左側の送り状の明細にそろえられてしまい、右側の受領書の明細に上手く配置されません。
左右明細の高さが違う場合はどうしたらよいのでしょうか?
よろしくお願いいたします。
フォームの一番上を表示する
そもそも表示位置が変わるような削除処理をしない
明細を持つ伝票とその複写を同じページに2分割して表示する - hatena chips
のサンプルファイル内の「R_納品書_左右」と同じ方法を使っているということでしょうか。
だとしたら、ページ全体の罫線はページヘッダーに配置してますので、そこの罫線の配置を左右別々に設定すればいいだけです。
ただし1ページの明細データが17件を超えないようにしましょう。
17件を超える場合があるときは、17件で改行するようにページフッターの高さを調整するといいでしょう。
標題の質問にお答えいただきありがとうございます!確認します。
上記のコードでもうまくいきませんでした。
また、F診断カルテで情報を追記し、診断テーブルで情報が追記されていることを確認できている状況で
F診断リストで「me.refresh」を試みても更新ができませんでした。
F診断リストを一回閉じて開きなおすと、更新ができます。
閉じて開きなおす、というVBAを実行するべきなのでしょうか…?
クリックしたボタンなら
Me.ActiveControl
で取得できますボタン名:btn診療リスト
フォーム名:F_診断リスト
質問の内容だとボタン名とフォーム名は同じではないですね
ボタンの画面上に表示している文字ならそれは標題です。VBAなら
Caption
で取得できますユーザー定義関数とする場合、一つのフォームで使うだけならそのフォームのモジュールに記述して
Me
キーワードでいいですが、様々なフォームで使おうとするなら標準モジュールに記述することになりMe
は使えません。そんなときにはCodeContextObject
を使いますあとはまぁ、どうしてもフォーム名を直接指定したいなんて場合もでるでしょう
返信ありがとうございます。
送り状,受領書は伝票が左右に並んでいます。1ページに17行印刷されます。
受領印は受領書の右下に配置しようと考えています。
よろしくお願いいたします。
A4横2分割ということは伝票が左右に並んでいるということでしょうか。
明細の行数は同じですよね。
伝票によって明細数が変わったらおかしなことになりますので。
あと、受領印はどの位置に配置しますか。
できれば、印刷イメージの画像をアップロードしてもらうと分かり安いとと思います。
新しいスレッドを立てて違う質問を書くつもりが、うっかり同じスレッドに2つ書いてしまいました。
分けた方がよかったでしょうか?
申し訳ありません。
現在「診断リスト」から、各「診断カルテ」を開くボタンがあります。
「診断リスト」は開いたまま上に「診断カルテ」を開く状態です。
「診断カルテ」にて、フィールド「タイトル」を変更した際、「診断カルテ」を閉じて
「診断リスト」を見ると、「タイトル」は変更されていません。
「診断カルテ」の閉じるボタンを以下にしてみましたが・・・ダメでした。
どうすればリアルタイムで変更が反映されるようになるのでしょうか。