Microsoft Access 掲示板

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

11 コメント
views
4 フォロー

おせわになります。
検索フォームから、更新削除フォームを開くときに"商品コード"を引数で渡して
更新削除フォームの商品コードにこの値を表示したいので、下記のように記述しました。

検索フォーム側
Dim args As String
args = Me.商品コード
DoCmd.OpenForm "F05_更新削除", acNormal, , , , acDialog, args

更新削除フォーム側
Private Sub Form_Open(Cancel As Integer)
If IsNull(Me.OpenArgs) = False Then
me.商品コード.Value = Me.OpenArgs
End If
End Sub

しかし、何も表示されずオープンされます。
検索フォーム側で開くを押したときには引数が設定されてそうですが
更新削除フォーム側でみるとnull値になっているみたいです。
更新削除フォームは非連結です。

本当は、検索フォーム(帳票)で選択したレコード内容(5フィールド)を
更新削除フォーム(単票)にそのまま表示したいのですが可能でしょうか?
よろしくお願い致します。😥

aya
作成: 2021/02/24 (水) 00:38:46
通報 ...
1

更新削除が目的なら、連結フォームでやれば簡単ですが、非連結フォームでやる理由はなんでしょうか。

下記のように抽出条件を設定して開けば、目的のレコードが表示されます。更新削除フォーム側のコードは不要になります。

Dim args As String
args = Me.商品コード
DoCmd.OpenForm "F05_更新削除", acNormal, , "商品コード='" & args & "'", , acDialog
2

hatenaさん毎度ありがとうございます😊

非連結の理由は、気付かずに誤入力しても簡単に更新されてしまうのを防ぐためです。
どうも連結させてると、なんだか知らずにデータが書き換わってしまうので非連結で更新ボタン押さないと更新されないようにしました。もっと簡単な誤入力を防ぐ方法はありますか?

また、argsの方ですがご教授のとおり記入してみましたがやはりF05_更新削除は開きますがデータが渡ってないみたいです。
空白で表示されてしまいます。
なにかF05_更新削除側で邪魔してるのでしょうか??
argsについて調べると両方に記述するように書いてありますが、何が違うんでしょうか?
よろしくお願い致します。

3

非連結の理由は、気付かずに誤入力しても簡単に更新されてしまうのを防ぐためです。
どうも連結させてると、なんだか知らずにデータが書き換わってしまうので非連結で更新ボタン押さないと更新されないようにしました。もっと簡単な誤入力を防ぐ方法はありますか?

下記を参考にしてください。

レコード入力時に「保存」コマンドボタンでのみレコード保存できるようにする - hatena chips

4

ありがとうございます。
F05_更新削除を、なんとか教えてもらったリンク先の通り連結フォームで作ってレコードソースをT01_商品としました。
F05_更新削除を呼び出すフォームのコマンドボタンに下記のように記してデータ取得でき、希望通りになりました!
    Dim args As String
    args = Me.商品コード  
    DoCmd.OpenForm "F05_更新削除", acNormal, , "商品コード='" & args & "'", , acDialog

別のフォームからF05_更新削除を開くときはこれでいいのですが、F05_更新削除を直接開くときにレコードソースが指定してあるのでもともとデータが入った状態で表示されますが、これを空白で表示させるやり方はありますか?

例えば読み込み時に「'DoCmd.GoToRecord acDataForm, "F05_更新削除", acNewRec」と入力して
開いたとき新規レコードにしてしまえばと思ったのですが、これだと先ほど教えていただいたこのフォームをargsで呼び出すときに影響してしまいます。
よろしくお願いいたします。

5

直接開く時は、新規レコード入力の状態で開きたいということですね。
デザインビューてフォームの「データ入力用」プロパティを「はい」にしておくといいでしょう。

呼び出すときは編集モード(acEdit)で呼び出します。

    Dim args As String
    args = Me.商品コード  
    DoCmd.OpenForm "F05_更新削除", acNormal, , "商品コード='" & args & "'", acEdit, acDialog
6

ありがとうございます!
上記の方法で希望したことができることを確認しましたが、ひとつ説明不足でできないことがあります。
すみません。。。
更新削除フォームを直接開くと、商品コード検索という非連結のコンボボックスがひとつおいてあって
そこで選んだ商品コードに値するレコードが表示できるようにしています。
「入力用」にすると、これがきかなくなってしまいます。
入力用にしないで新規レコード入力の状態で開くことはできますか?
よろしくお願いいたします。

7
hatena 2021/02/27 (土) 12:43:05 修正

フォームのプロパティを下記のように設定します。

プロパティ設定値
フィルター商品コード=Forms!F05_更新削除!商品コード検索
読み込み時にフィルターを適用はい
データ入力用いいえ
フィルターの使用いいえ
 
「商品コード検索」の更新後処理で再クエリするようにします。VBAなら、下記のコードで。
Private Sub 商品コード検索_AfterUpdate()
    Me.Requery
End Sub

さらに開く時にコンボボックスを検索値に設定しておくいいでしょう。

Private Sub Form_Open(Cancel As Integer)
    If Me.OpenArgs <> "" Then
      me.商品コード検索.Value = Me.OpenArgs
    End If
End Sub

検索フォームからこのフォームを呼び出すときは、下記のように OpenArgs を設定しておきます。

    Dim args As String
    args = Me.商品コード
    DoCmd.OpenForm "氏名テーブル", acNormal, , "氏名ID=" & args & "", , acDialog, args
8

ありがとうございます!この設定でやりたいことができました!
今回も大変勉強になりました。
解決クローズです。

9

こんにちは!!
こちらで教えていただいたこの方法が大変役にたっておりますが、これと全く同じ方法で、今度は指定項目は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

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

10
りんご 2021/06/24 (木) 20:05:00 c564b@0e907

 横道に逸れるけど、結果フォームを連結フォームに変更したという事ならば、結果フォームに検索機能を統合すれば、どうなるか?
 あとは、解決クローズならば、スレ立て直しがいいかも。

11

ありがとうございます!
すみませんでした。スレ立てなおしますね!