Microsoft Access 掲示板

サブフォームから選択したデータをフォームに表示

8 コメント
views
4 フォロー

大変お世話になっています。連投申し訳ありません。

画像1

このような原材料のマスタを作っています。
登録・クリア・閉じるはできたのですが、修正と削除をする時に、
サブフォームに表示されているテーブルからデータを選択すると、フォームに表示されて、
そこで変更。修正を押すとデータが修正、削除を押すとデータが削除されるようにしたいです。

色々調べてみたのですが、サブフォームから選んだデータをフォームに表示させる方法がわかりません…

聞いてばかりで申し訳ありません。どうかご教授のほどよろしくお願い致します。

まき
作成: 2022/08/16 (火) 16:12:01
通報 ...
1

メインフォームは連結ですか、非連結ですか。

非連結の場合、現状のメインフォームのコードを提示してもらえますか。
サブフォームにもコードがあるなら、それも提示してください。

2

たびたびお世話になっています。

メインフォームは非連結です。
画像1
このような感じです。
コードは、

Option Compare Database

Private Sub btn_クリア_Click()
    Me!cmb_分類 = ""
    Me!txb_コード = ""
    Me!txb_品名 = ""
    Me!cmb_単位 = ""
    Me!txb_巾 = ""
    Me!txb_長さ = ""
    Me!txb_登録日 = ""
    Me!txb_更新日 = ""
    Me!txb_単価 = ""
    Me!txb_改訂前単価 = ""

End Sub

Private Sub btn_登録_Click()
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "Q_追加T_原材料テーブル"
    DoCmd.SetWarnings True

    Me!cmb_分類 = Null
    Me!txb_コード = Null
    Me!txb_品名 = Null
    Me!cmb_単位 = Null
    Me!txb_巾 = Null
    Me!txb_長さ = Null
    Me!txb_登録日 = Null
    Me!txb_更新日 = Null
    Me!txb_単価 = Null
    Me!txb_改訂前単価 = Null
    DoCmd.GoToControl "cmb_分類"
    Me.sub_原材料.Form.Requery
End Sub

Private Sub btn_閉じる_Click()
    DoCmd.Close acForm, Me.Name
End Sub

Private Sub Form_AfterUpdate()

End Sub

Private Sub Form_Open(Cancel As Integer)
    DoCmd.SelectObject acForm, Me.Name
    DoCmd.MoveSize , , 13000, 9200

End Sub

このようになっているのですが、これで大丈夫でしょうか。
よろしくお願いします。

3
まき 2022/08/17 (水) 10:16:04 e57da@3434b

あともう一点お聞きさせてください。
先ほど、自分のパソコン(デスクトップPC)とは違うパソコン(ノートPC)で作ったデータを見せてもらったら、
レイアウトが少しずれていました。(線が重なっていたり離れていたり、文字の位置がずれていたり)
自分のパソコンからはきれいに見えていたのでちょっとショックだったのですが、
これは、何かAccessの設定の問題でしょうか…

4

まず、回答の前にひとつ提案ですが、
現状のサブフォームのレコードソースのテーブルから、分割フォームを作成すれば、単票フォームの下にデータシートビューが表示されて、データシートでレコードを選択して、単票フォームの方でそのレコードの編集ができるようになります。
いっさいVBAなしで、見た目は現状とほぼ同じものが作成できます。

分割フォーム(単票フォームとデータシートを同時に表示)の作成と使い方 | Access 2016 | 初心者のためのOffice講座

上記を検討されることをお勧めします。
現状のサブフォーム形式で行く場合、かなりのスキルを必要とします。

本題

サブフォーム形式にチャレンジするということなら、
まずは、サブフォームのレコード移動時のイベントプロシージャを下記のように記述します。

Private Sub Form_Current()
    With Me.Parent.Form
        !cmb_分類 = Me!分類
        !txb_コード = Me!コード
        !txb_品名 = Me!品名
        !cmb_単位 = Me!単位
        !txb_巾 = Me!巾
        !txb_長さ = Me!長さ
        !txb_登録日 = Me!登録日
        !txb_更新日 = Me!更新日
        !txb_単価 = Me!単価
        !txb_改訂前単価 = Me!改訂前単価
    End With
End Sub

 
次にメインフォームの各コマンドボタンのクリック時のイベントプロシージャを下記のように記述します。

Private Sub 修正_Click()
    With Me.F_売上.Form
        !分類 = Me!cmb_分類
        !コード = Me!txb_コード
        !品名 = Me!txb_品名
        !単位 = Me!cmb_単位
        !巾 = Me!txb_巾
        !長さ = Me!txb_長さ
        !登録日 = Me!txb_登録日
        !更新日 = Me!txb_更新日
        !単価 = Me!txb_単価
        !改訂前単価 = Me!txb_改訂前単価
        .Refresh 'レコードソースのテーブルに反映
    End With
End Sub

Private Sub 削除_Click()
    With Me.F_売上.Form
        'サブフォームが新規レコードでなければ、カレントレコードを削除
        If Not .NewRecord Then .Recordset.Delete
    End With
End Sub

このような設計にした場合、
現状の登録ボタンとクリアボタンの処理は再検討する必要があると思います。

登録ボタンは、サブフォームが新規レコードのときのみ有効にするとか。

また、クリアボタンが必要かどうかも検討する必要があります。

5

先ほど、自分のパソコン(デスクトップPC)とは違うパソコン(ノートPC)で作ったデータを見せてもらったら、
レイアウトが少しずれていました。(線が重なっていたり離れていたり、文字の位置がずれていたり)

推測ですが、Windowsの「カスタムスケーリング」の設定がPCによって異なっているのではないでしょうか。
「カスタムスケーリング」の設定を同じにしてみてください。

【Windows10】画面の解像度を変えずに文字だけを拡大する方法 - 特選街web

6
まき 2022/08/18 (木) 16:06:58 e57da@3434b

いつも大変お世話になっています。教えていただきありがとうございました。

分割フォームは、作ってみたのですがうまくいかなくて、今回のような形で作ってみました。
でも、スキルが必要とのことだったので、こちらはいつかちゃんとできるようになってから再度チャレンジするとして、
もう一度分割フォームで作成してみました。

それで、一応形はできたと思うのですが、少し質問させてください。

1.フォームをポップアップにして、開いた時のサイズを指定したいのですが、この分割フォームで作ったものを
他のものと同じように設定したところ、下記のようなエラーがでてしまいます。

画像1

コードは、「開く時」のところに

Private Sub Form_Open(Cancel As Integer)
    DoCmd.SelectObject acForm, Me.Name
    DoCmd.MoveSize , , 13000, 9200

End Sub

と入れていました。エラーが出るので、指定せずに開くと画面いっぱいになってしまって、使いづらいです…

2.登録する時と修正する時に、登録ボタンと修正ボタンを押さないとできないようにすることはできますか。
(これができないような気がして、サブフォームで非連結のフォームを作ってみました)

いつも教えていただいて申し訳ありません。
よろしくお願いします。

7

当方のサンプルで確認してみましたが、

Private Sub Form_Open(Cancel As Integer)
    DoCmd.SelectObject acForm, Me.Name
    DoCmd.MoveSize , , 13000, 9200
End Sub

でエラーがでることはないですね。
ファイルの破損が疑われますので、修復・最適化をしてみるか、下記で紹介しているリフレッシュを試してみてください。
AccessのDBファイルを長期的に安定して使用するには - hatena chips

2.登録する時と修正する時に、登録ボタンと修正ボタンを押さないとできないようにすることはできますか。

下記で紹介している方法が使えると思います。

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

8
まき 2022/08/19 (金) 15:53:57 6c86b@3434b

わざわざ調べていただき、ありがとうございます。
やっぱりエラーがでるので、フォームをコピーしてから開いてみたらエラーが出ませんでした。
理由はわかりませんが、ありがとうございました。

登録ボタンと修正ボタンの方も、教えていただいたコードを使ってできるようになりました。
ありがとうございます。また一歩前に進みました。

やりたいことはあって、書籍やYoutubeやネットを色々みて勉強しているつもりなのですが、
知識が追い付かないので、なかなか思うようにできません…
お聞きしてばかりで本当に申し訳ないです。
また教えてください。よろしくお願いします。