Microsoft Access 掲示板

フォームのopenコマンドでのopenargs2

7 コメント
views
4 フォロー

こんにちは。
こちらで以前、検索フォームから別のフォームを開く時にopenargsを使用する開き方を教えていただいたのですが
これと全く同じ方法で、今度は指定項目が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

お手数ですが、宜しくお願いいたします😵

aya
作成: 2021/06/24 (木) 21:19:57
通報 ...
1
りんご 2021/06/24 (木) 22:57:50 c564b@0e907

 ググると、色々出てますが、どうですか?ネット情報なので、もしかしたら、過不足や間違いがあるかもしれませんが。
【Access】OpenArgsでフォームを開く引数に複数の値を渡したい|アズビーパートナーズ
T'sWare Access Tips #648 ~フォームに複数のOpenArgsを渡すには?~
 ところで、前の質問中に、下記コメントがありました。

F05_更新削除を、なんとか教えてもらったリンク先の通り連結フォームで作ってレコードソースをT01_商品としました。
更新削除フォームを直接開くと、商品コード検索という非連結のコンボボックスがひとつおいてあって
そこで選んだ商品コードに値するレコードが表示できるようにしています。

少し気になったのが、openargsでやり取りする理由です。
・帳票が検索しやすい、単票が更新削除しやすい、とか?
・非連結のときに、5つのフィールドのデータを受け渡しする予定だったから、とか?
 更新削除フォームのヘッダーに、商品コードや商品名のリストボックスを配置、コンボボックス連結クエリの抽出条件に、リストボックスを設定するのは、どうでしょう。

2
りんご 2021/06/24 (木) 23:52:42 c564b@0e907 >> 1

ごめんなさい、一部、訂正します。

更新削除フォームのヘッダーに、商品コードや商品名のリストボックスを配置、コンボボックス連結クエリの抽出条件に、リストボックスを設定するのは、どうでしょう。

更新削除フォームのヘッダーに、商品コードや商品名のリストボックスを配置、コンボボックス(非連結を想定していますがどうかな?)の値集合ソースに設定しているクエリを開いて、抽出条件にリストボックスを設定するのは、どうでしょう。

3

りんごさんありがとうございます。
検索不足でした。
リンク先で、複数の値を渡すやり方で引数を渡すことができました!!

渡す側
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_更新削除_来院データ!来院日時検索)と入力していて、ヘッダーにあるコンボボックスの引数に応じてレコードを表示させています。
分かりにくい説明で大変恐縮ですが、よろしくお願いいたします。

5
りんご 2021/06/25 (金) 01:52:38 c564b@0e907 >> 3

なんか動きが変なんです。

ダイアログ(acDialog)で開くのをやめたから?
AccessVBAでフォームを画面遷移っぽく見せる - Ateitexe アテークゼ *非IT企業のプログラマによるメモブログ
規定値モード(acWindowNormal)で開いたら、DoCmd.Close acForm, Me.Nameとするブログがありました。どうでしょう?

4

更新削除フォームのヘッダーに、商品コードや商品名のリストボックスを配置、コンボボックス(非連結を想定していますがどうかな?)の値集合ソースに設定しているクエリを開いて、抽出条件にリストボックスを設定するのは、どうでしょう。

↑これのやり方ですが、わからないので質問させてください。
引数で渡している2つは、「F05_更新削除_来院データ」フォームのヘッダーに作成してある非連結のコンボボックスです。
顧客データと来院日時です。
これとは別にこの二つのリストボックスを作成するのでしょうか?
そしてもともとあるコンボボックスの値集合ソースにリストボックスを設定するのですか?!
知識が乏しくイメージが湧かなくて申し訳ないです。

6
りんご 2021/06/25 (金) 05:01:26 c564b@0e907 >> 4

 ごめんなさい、混乱させてしまいました。顧客データと来院日時のコンボボックスが既にあるという事ですね。私がイメージしたのは、コンボボックスの代わりに、リストボックスを使う方法でした。
 こんな遊びもあるよと軽く読んで下さい。
 準備するものは、こんな感じです。
  明細フォーム・・・・・・・・・・レコードソース:フォームに連結した明細クエリ
  顧客コード検索リストボックス・・・値集合ソース:顧客コード検索クエリ、非連結
  来院日時検索リストボックス・・・・値集合ソース:来院日時検索クエリ、非連結
  明細リストボックス・・・・・・・・値集合ソース:フォームに連結しない明細クエリ、非連結
 顧客コードと来院日時が決まると、明細リストボックスが絞り込まれる。(帳票絞り込みのイメージ)
  顧客コード検索リストボックスのクリック時イベント:Me.明細リストボックス.Requery
  来院日時検索リストボックスのクリック時イベント :Me.明細リストボックス.Requery
 明細リストボックスからどれか選ぶと、明細フォームが絞り込まれる。(単票絞り込み)
  明細リストボックスのクリック時イベント     :Me.Requery
 絞り込むために、同じ明細クエリを2つ用意、名前を変えて、抽出条件で違いを出します。
  フォームに連結しない明細クエリ
   顧客コードフィールド:[Forms]![明細フォーム]![顧客コード検索クエリ]
   来院日時フィールド:[Forms]![明細フォーム]![来院日時検索クエリ]
  フォームに連結した明細クエリ
   明細IDフィールド:[Forms]![明細フォーム]![フォームに連結しない明細クエリ]
 以上になります。
  
 

7

ありがとうございます!!
今とりあえず試行錯誤してやってみたopenargsをやってみてからコピーして教えてもらったやり方も試してみます。
リストボックスとは思いもつかなかったやり方です。勉強になります!
先に今うまくいってないopenargsですが、やりたいことにとても近づいてるんですがやはり動きが不安定なんです。
どこか間違っていますか??
これをやるのにopenargsはむいてないのでしょうか。
よろしくお願いいたします。