解決しました。
以下の関数で出来ました。
Public Sub initalizeTables(tblName$)
CurrentProject.Connection.Execute "DELETE FROM " & tblName$
CurrentProject.Connection.Execute "ALTER TABLE " & tblName$ & " ALTER COLUMN id NUMBER"
CurrentProject.Connection.Execute "ALTER TABLE " & tblName$ & " ALTER COLUMN id COUNTER (1, 1);"
End Sub
渡す側
Private Sub 更新削除_Click()
Dim args As String
args = Me.顧客コード & "," & Me.来院日時
DoCmd.OpenForm "F05_更新削除_来院データ", , , , , , args
End Sub
受ける側
Private Sub Form_Open(Cancel As Integer)
Dim str As Variant
If Me.OpenArgs <> "" Then
str = Split(Me.OpenArgs, ",", , vbTextCompare)
Me.顧客コード検索.Value = str(0)
Me.来院日時検索.Value = str(1)
End If
End Sub
Private Sub テキスト1_Change()
Me.Requery
Me.テキスト1.SetFocus
If IsNull(Me.テキスト1) Then
Me.テキスト1.SelStart = 0
Else
Me.テキスト1.SelStart = Len(Me.テキスト1)
End If
End Sub
ボタンを配置して、
・マウスボタンクリック時イベント
Private Sub ボタン1_MouseDown(ほにゃらら、自動入力されるので、省略)
Me.テキスト1 = “[ア-オ]“
Me.Requery
End Sub
mayu さま
hiroton さま
一時はどうなるのか心配していましたが、
お陰様で思い通りのレポートを出力することができました。
クエリの使い方次第で色んなことが出来そうですので
もうすこし勉強していこうと思っています。
ありがとうございました。
hiroton様
回答ありがとうございます。
おかげさまで実装できました!!
稚拙な文章にも関わらずご理解いただき大変感謝しております。
またお力を貸して頂けると嬉しいです。
間違える手順もなさそうですが念のため
動作チェックとして、「再クエリ」のアクションを削除して実行してみてください。テキストボックスに文字を入力するだけになりますがエラーがでますか?
次に、テキストボックスの名前とマクロで設定するコントロール名を変更して試してください(たとえば「test1」とか)
あとは・・・ボタンと非連結のテキストボックスは同じフォームの上にありますよね?
ありがとうございます。なんどもすみません。
教わったそのとおりにやってみましたが、「あ」のボタンを押すと
「コントロール名"抽出用カナ"が正しくないか、存在しないコントロールを参照しています」とエラーが出ます。
配置したテキストボックス、作成したクエリ、埋め込みマクロのコントロール名 すべて確認しましたが、抽出用カナとして間違っていないはずなのですが、何がいけないのでしょうか?
たとえばレポートフッターにテキストボックスを配置しレコードソースを次のようにします
質問を読み違えてました。
チェックの入ったレコードを表示しないというのがご希望だと思っていました。
チェックの入ったレコードのあるフィールドの値を非表示にしたいということですね。
hirotonさんから適切な回答がついていますのでそちらを参考にしてください。
hiroton様
少しお聞きしたいのですが、購入不要のものはレポート上に表示されなくなりました。
今表示されている制服の各種類、各サイズの合計をレポート上に表示することは可能でしょうか?
例えば
上着のSサイズが8 Mサイズが17 Lサイズが20
ズボンの9号が18 11号が28・・・
のようにそれぞれのサイズの合計を出したいです。
追加質問のようになり申し訳ありませんがお分かりであれば教えて頂きたいです。
フィールドの値を個別にON/OFFしたいならクエリにチェックの内容で条件分岐させたフィールドを作ったらいいですね
ex)クエリのフィールド
テキストボックスのコントロールソースで同様に指定する形でもいいです
ex)テキストボックスのコントロールソース
余談ですが、名前が「上着チェック」だとONで要なのか「いらないときはチェックをつける」なのかわからないですね
「チェック」自体はデータ型を見れば「Yes/No型」なのでわかると思います
のようにするといいと思います
hatena様
失礼いたしました。
クリック時のイベントに記述しました。
クリック時のイベントに記述しましたがやはりチェックされた人のレコード自体消えてしまいます・・・
テーブル情報は以下になります。
☆社員制服マスタ
社員番号:数値型
上着サイズ:テキスト型
ズボンサイズ:テキスト型
シャツサイズ:テキスト型
キャップサイズ:テキスト型
上着チェック:Yes/No型
ズボンチェック:Yes/No型
シャツチェック:Yes/No型
キャップチェック:Yes/No型
このチェックは支給不要と回答した社員にチェックを入れて管理表のレポートにサイズを表示しないようにしたいのです。
提示して頂いたコードをクリック時に入れると、上着のチェックボックスにチェックを入れてるだけでもその人のレコードがレポートに表示されなくなりました。
フィールドと連結しているチェックボックスにチェックを入れると、そのフィールドの値が表示されないという仕様を実装したいです。
説明が凄く下手で本当に申し訳ありませんが宜しくお願い致します。
提示のコードは、開く時のイベントではなく、フォーム上に配置したコマンドボタンのクリック時のイベントプロシージャに記述してください。
hatena様
回答ありがとうございます。
提示して頂いたVBAを開くときのイベントに入れてみましたが、チェックするとテキストボックスの値だけでなくちぇチェックされた人のデータそのものがレポートに表示されなくなりました・・・
チェックされたテキストボックスの値を空白のように表示されないようにしたいのですが可能でしょうか?
言葉足らずで申し訳ありませんが宜しくお願い致します。
改めて考えてみたんですがSTARTの判定はよくないですね
ENDのレコードの存在が保証されない場合データが漏れます
ENDのレコードの存在が保証されているなら奇数偶数でSTART/ENDがきれいに出現するのでIF判定が必要ないです
フィールド「
小計グループ:nz(DMax("順番","クエリ","品<>'"&[品]&"' AND 順番<"&[順番]),0)
」を作って、これを順番よりも上位でグループ化してグループフッターを付けてみたらどうでしょう?VBAは分からないので埋め込みマクロでということでしょうか。
上でも書きましたがコマンドボタンよりオプショングループとトグルボタン(ラジオボタン)でやるのがUI上もいいでしょう。
フォーム上にオプショングループを配置して、その中にラジオボタンを10個配置します。
それぞれのトグルボタンのプロパティを下記のように設定します。
標題 ア
オプション値 1
標題 カ
オプション値 2
標題 サ
オプション値 3
・
・
・
標題 ワ
オプショングループの名前 フレーム1
オプショングループの更新後処理の埋め込みマクロに下記のように設定します。
コンボボックスの値集合ソースのクエリの抽出条件は下記のようにします。
オプショングループの作り方がよく分からない場合は、コントロールウィザードで作成できます。
下記を参考にしてください。
Accessのフォームでオプションボタンを使ってデータを入力する方法 | できるネット
質問の表のテーブルだとして、
テーブルから集計クエリを作成して、種別1と購入日でグループ化、SEQ(連番)は最小に設定。
さらにクエリを新規作成して、テーブルと上のクエリを追加して、種別1と購入日で結合。
これをレポートのレコードソースにして、SEQでグループ化、並べ替えをすればいいでしょう。
あるいは、レポートのレコードソースはテーブルにしておいて、
グループ化と並べ替えの「フィールドの選択」で「式」を選択して、
そこに下記の式を設定するというのでもいいでしょう。
DMin("SEQ","テーブル名","種別1='" & [種別1] & "' AND 購入日=#" & [購入日] & "#")
レポートの「並び替え/グループ化」には
上下のレコードで値を比較してグループ分けする機能はありません。
したがって
グループ連番は SQL を用いて
スカラサブクエリや定義域集計関数で付与することも出来ますけど
件数によっては重くなるため、
テーブルに連番用のフィールドを作成して
値を一気に書き込んでしまったほうがいいように思います。
サンプルコードを提示してもいいのですけど
ほほさんのスキルが分かりませんし、Access 2003, 2010をお使いとのことなので
もしかすると、Recordsetを用いたデータ編集のご経験もおありなのではと推測します。
なお、レポート上で工夫するなら、並び替えの最初に
という式を組み込んで
ご希望の形に近いレイアウトにすることは可能ですけど
2階層目を「品」でグループ化すると「順番」の昇順にはデータが並ばないでしょう。
以上のヒントをもとに、まずはご自身で試行錯誤してみることをお勧めします。
oGFzgtnIStrl6D0さま
同じような問題で悩んでいました。
今どきですが、アクセス初心者で2003開発しています。
>kitasueさんのご回答内容を元に出来ました。
>感謝致します。
↑こちらはグループ化して
昇順・降順選択後にソートされたのですか?
ご意見聞かせてください。
テーブルのフィールドは必要ないですよ
フォームデザインツールでコントロールの中からテキストボックスを選んでフォーム上の適当な場所に配置し、「テキスト ボックス名を指定してください。」のとこで「抽出用カナ」と入力します
これで、フォームのデザインビュー上でテキストボックスに「非連結」と表示された名前プロパティが「抽出用カナ」のテキストボックスが配置できます
配置済みの適当なテキストボックスをコピー&ペーストしてコントロールソースプロパティを「」(削除)、名前プロパティを「抽出用カナ」と変更してもかまいません。コントロールソースプロパティがないテキストボックスはデザインビュー上で「非連結」と表示されます
このような「非連結」のテキストボックスを配置すると、テーブルのデータに影響しない自由な入力のできるテキストボックスになります。今回は五十音の各ボタンがあって、それぞれで動きを変えたいのでどのボタンを押したのかを覚えておく必要があります。フォームに専用のメモ書きを用意してるという感じです
hatenaさん
いつもありがとうございます!
できました!今回も勉強になりました!
レコードソースを変えると思いもしませんでした。。。
本当にありがとうございました。
解決です☺
OrderBy に指定できるのはレコードソースのフィールドのみになります。
フォーム上のコントロールの式では並べ替えはできません。
レコードソースをクエリにして、そこのフィールドに式を設定してください。
上記は顧客コードが数値型の場合です。
顧客コードがテキスト型の場合は、下記になります。
クエリで、チェックボックスと連結しているフィールドの抽出条件を False と設定して、
そのクエリをレポートのレコードソースとすればいいでしょう。
あるいは、レポートのレコードソースには抽出条件を設定せずに、レポートを開く時にフィルターをかけてもいいでしょう。
VBAなら下記のようになります。
hiroton さんありがとうございます。
まず私にもわかるかもしれないこのパターンでやってみようと取り組んでいますが、
質問させてください。
テーブルに「抽出用カナ」に該当するフィールドがなく、「苗字カナ」とは別にそれを設ける必要があるということでしょうか?
解決しました。
以下の関数で出来ました。
Public Sub initalizeTables(tblName$)
CurrentProject.Connection.Execute "DELETE FROM " & tblName$
CurrentProject.Connection.Execute "ALTER TABLE " & tblName$ & " ALTER COLUMN id NUMBER"
CurrentProject.Connection.Execute "ALTER TABLE " & tblName$ & " ALTER COLUMN id COUNTER (1, 1);"
End Sub
▼参考
sql - MS Access run-time error 3259 invalid field data type on alter table - Stack Overflow
https://stackoverflow.com/questions/22659444/ms-access-run-time-error-3259-invalid-field-data-type-on-alter-table/33188788
私も同じエラーが出ます。
エラー番号3259
フィールドのデータ型が正しくありません。
▼実行したコード
currentdb.execute "ALTER TABLE inRecve ALTER COLUMN id COUNTER (1, 1)"
ありがとうございます!!
今とりあえず試行錯誤してやってみたopenargsをやってみてからコピーして教えてもらったやり方も試してみます。
リストボックスとは思いもつかなかったやり方です。勉強になります!
先に今うまくいってないopenargsですが、やりたいことにとても近づいてるんですがやはり動きが不安定なんです。
どこか間違っていますか??
これをやるのにopenargsはむいてないのでしょうか。
よろしくお願いいたします。
このボタンというのが、コマンドボタンのことなら、ラジオボタン(オプショングループ内に配置)で実装したほうがいいでしょう。今、押しこれまているボタンの文字で抽出されていると目で見て分かりますので。
下記でラジオボタンで50音選択できるサンプルを紹介しています。
オプショングループで50音選択 高速版 - hatena chips
上記のサンプルをフォームのデータにフィルターをかけるものですが、生成された抽出条件でSQLをコンボボックスに設定すればいいでしょう。
ごめんなさい、混乱させてしまいました。顧客データと来院日時のコンボボックスが既にあるという事ですね。私がイメージしたのは、コンボボックスの代わりに、リストボックスを使う方法でした。
こんな遊びもあるよと軽く読んで下さい。
準備するものは、こんな感じです。
明細フォーム・・・・・・・・・・レコードソース:フォームに連結した明細クエリ
顧客コード検索リストボックス・・・値集合ソース:顧客コード検索クエリ、非連結
来院日時検索リストボックス・・・・値集合ソース:来院日時検索クエリ、非連結
明細リストボックス・・・・・・・・値集合ソース:フォームに連結しない明細クエリ、非連結
顧客コードと来院日時が決まると、明細リストボックスが絞り込まれる。(帳票絞り込みのイメージ)
顧客コード検索リストボックスのクリック時イベント:Me.明細リストボックス.Requery
来院日時検索リストボックスのクリック時イベント :Me.明細リストボックス.Requery
明細リストボックスからどれか選ぶと、明細フォームが絞り込まれる。(単票絞り込み)
明細リストボックスのクリック時イベント :Me.Requery
絞り込むために、同じ明細クエリを2つ用意、名前を変えて、抽出条件で違いを出します。
フォームに連結しない明細クエリ
顧客コードフィールド:[Forms]![明細フォーム]![顧客コード検索クエリ]
来院日時フィールド:[Forms]![明細フォーム]![来院日時検索クエリ]
フォームに連結した明細クエリ
明細IDフィールド:[Forms]![明細フォーム]![フォームに連結しない明細クエリ]
以上になります。
ダイアログ(acDialog)で開くのをやめたから?
AccessVBAでフォームを画面遷移っぽく見せる - Ateitexe アテークゼ *非IT企業のプログラマによるメモブログ
規定値モード(acWindowNormal)で開いたら、DoCmd.Close acForm, Me.Nameとするブログがありました。どうでしょう?
更新削除フォームのヘッダーに、商品コードや商品名のリストボックスを配置、コンボボックス(非連結を想定していますがどうかな?)の値集合ソースに設定しているクエリを開いて、抽出条件にリストボックスを設定するのは、どうでしょう。
↑これのやり方ですが、わからないので質問させてください。
引数で渡している2つは、「F05_更新削除_来院データ」フォームのヘッダーに作成してある非連結のコンボボックスです。
顧客データと来院日時です。
これとは別にこの二つのリストボックスを作成するのでしょうか?
そしてもともとあるコンボボックスの値集合ソースにリストボックスを設定するのですか?!
知識が乏しくイメージが湧かなくて申し訳ないです。
りんごさんありがとうございます。
検索不足でした。
リンク先で、複数の値を渡すやり方で引数を渡すことができました!!
渡す側
Private Sub 更新削除_Click()
Dim args As String
args = Me.顧客コード & "," & Me.来院日時
DoCmd.OpenForm "F05_更新削除_来院データ", , , , , , args
End Sub
受ける側
Private Sub Form_Open(Cancel As Integer)
Dim str As Variant
If Me.OpenArgs <> "" Then
str = Split(Me.OpenArgs, ",", , vbTextCompare)
Me.顧客コード検索.Value = str(0)
Me.来院日時検索.Value = str(1)
End If
End Sub
これで、正しく渡したい引数を渡して「F05_更新削除_来院データ」にも正しく表示されるのですが
なんか動きが変なんです。
渡す側で、コマンドボタンを押して「F05_更新削除_来院データ」が表示されるのですが
渡す側のフォームが全面にアクティブ化されていて開いたフォームが上手く表示できません。
また、続けてコマンドボタンを押すと今度はなにも反応しなくなってしまいます。
なにかおかしいでしょうか??
openargsでやり取りする理由は、それしかわからなかったからです😭
「F05_更新削除_来院データ」のフォームは、今回のようにコマンドボタンから引数を渡して開きたい場合と
直接開いて、ヘッダーにあるコンボボックスの引数を指定して表示させる2通りで表示させます。
このフォームのフィルターには、
(顧客コード=Forms!F05_更新削除_来院データ!顧客コード検索 and 来院日時=Forms!F05_更新削除_来院データ!来院日時検索)と入力していて、ヘッダーにあるコンボボックスの引数に応じてレコードを表示させています。
分かりにくい説明で大変恐縮ですが、よろしくお願いいたします。
ごめんなさい、一部、訂正します。
更新削除フォームのヘッダーに、商品コードや商品名のリストボックスを配置、コンボボックス(非連結を想定していますがどうかな?)の値集合ソースに設定しているクエリを開いて、抽出条件にリストボックスを設定するのは、どうでしょう。
ググると、色々出てますが、どうですか?ネット情報なので、もしかしたら、過不足や間違いがあるかもしれませんが。
【Access】OpenArgsでフォームを開く引数に複数の値を渡したい|アズビーパートナーズ
T'sWare Access Tips #648 ~フォームに複数のOpenArgsを渡すには?~
ところで、前の質問中に、下記コメントがありました。
少し気になったのが、openargsでやり取りする理由です。
・帳票が検索しやすい、単票が更新削除しやすい、とか?
・非連結のときに、5つのフィールドのデータを受け渡しする予定だったから、とか?
更新削除フォームのヘッダーに、商品コードや商品名のリストボックスを配置、コンボボックス連結クエリの抽出条件に、リストボックスを設定するのは、どうでしょう。
ありがとうございます!
すみませんでした。スレ立てなおしますね!
横道に逸れるけど、結果フォームを連結フォームに変更したという事ならば、結果フォームに検索機能を統合すれば、どうなるか?
あとは、解決クローズならば、スレ立て直しがいいかも。
こんにちは!!
こちらで教えていただいたこの方法が大変役にたっておりますが、これと全く同じ方法で、今度は指定項目は2つになるとどのように記述すればいいでしょうか??
どう変更してもうまくいかなくて、また教えていただけるとありがたいです。
検索フォーム側(商品コードだけではなくて商品名も一致しているレコードを表示したい)
Dim args,args2 As String
args = Me.商品コード
args2 = me.商品名
DoCmd.OpenForm "氏名テーブル", acNormal, , "商品コード=" & args & "", , acDialog, args,args2?
結果フォーム側
Private Sub Form_Open(Cancel As Integer)
If Me.OpenArgs <> "" Then
me.商品コード検索.Value = Me.OpenArgs
me.商品名検索.valtue = ????
End If
End Sub
お手数ですが、宜しくお願いいたします😵
テキストボックスを配置して、
・選択クエリの抽出条件に、Like[Forms]![フォーム1]![テキスト1] & “*”
・プロパティシートの変更時イベント
ボタンを配置して、
・マウスボタンクリック時イベント
コンボボックスを配置して、
・プロパティシートの値集合ソースに、絞り込むために活用した選択クエリを設定
・フォーカス取得時イベント
※名前の提示がないモノもあるので適当に読み替えてください
「従業員リストのフォーム」にテキストボックス「抽出用カナ」を配置します
「従業員リスト」テーブルを元にクエリ「Q従業員抽出」を作成します
「従業員リストのフォーム」にコンボボックス「従業員コンボボックス」を配置し、以下の設定にします
各ボタンの埋め込みマクロに次のようにアクションを追加します
プロパティの設定の値はそれぞれのボタンに合わせて変更してください
えっとですね、最終的に、ひとつのコンボボックスで出来ると思うのですが、うーん。
早速ありがとうございます!
あ行で絞り込んでいるのは、埋め込みマクロ(条件式 =[苗字カナ] Like "[ア-オ]*")です。
仮に、(やり方がよくわかっていませんが)クエリで絞り込んだ場合、あ行用のコンボボックス、か行用のコンボボックスと、それぞれに必要になるということでしょうか?
例えば、あ行で絞り込めた時に、活用した選択クエリを、コンボボックスのコントロールソースに設定するのは、どうでしょうか?