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
メインフォームは連結ですか、非連結ですか。
非連結の場合、現状のメインフォームのコードを提示してもらえますか。
サブフォームにもコードがあるなら、それも提示してください。
たびたびお世話になっています。
メインフォームは非連結です。
このような感じです。
コードは、
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
このようになっているのですが、これで大丈夫でしょうか。
よろしくお願いします。
あともう一点お聞きさせてください。
先ほど、自分のパソコン(デスクトップPC)とは違うパソコン(ノートPC)で作ったデータを見せてもらったら、
レイアウトが少しずれていました。(線が重なっていたり離れていたり、文字の位置がずれていたり)
自分のパソコンからはきれいに見えていたのでちょっとショックだったのですが、
これは、何かAccessの設定の問題でしょうか…
まず、回答の前にひとつ提案ですが、
現状のサブフォームのレコードソースのテーブルから、分割フォームを作成すれば、単票フォームの下にデータシートビューが表示されて、データシートでレコードを選択して、単票フォームの方でそのレコードの編集ができるようになります。
いっさいVBAなしで、見た目は現状とほぼ同じものが作成できます。
分割フォーム(単票フォームとデータシートを同時に表示)の作成と使い方 | Access 2016 | 初心者のためのOffice講座
上記を検討されることをお勧めします。
現状のサブフォーム形式で行く場合、かなりのスキルを必要とします。
本題
サブフォーム形式にチャレンジするということなら、
まずは、サブフォームのレコード移動時のイベントプロシージャを下記のように記述します。
次にメインフォームの各コマンドボタンのクリック時のイベントプロシージャを下記のように記述します。
このような設計にした場合、
現状の登録ボタンとクリアボタンの処理は再検討する必要があると思います。
登録ボタンは、サブフォームが新規レコードのときのみ有効にするとか。
また、クリアボタンが必要かどうかも検討する必要があります。
推測ですが、Windowsの「カスタムスケーリング」の設定がPCによって異なっているのではないでしょうか。
「カスタムスケーリング」の設定を同じにしてみてください。
【Windows10】画面の解像度を変えずに文字だけを拡大する方法 - 特選街web
いつも大変お世話になっています。教えていただきありがとうございました。
分割フォームは、作ってみたのですがうまくいかなくて、今回のような形で作ってみました。
でも、スキルが必要とのことだったので、こちらはいつかちゃんとできるようになってから再度チャレンジするとして、
もう一度分割フォームで作成してみました。
それで、一応形はできたと思うのですが、少し質問させてください。
1.フォームをポップアップにして、開いた時のサイズを指定したいのですが、この分割フォームで作ったものを
他のものと同じように設定したところ、下記のようなエラーがでてしまいます。
コードは、「開く時」のところに
Private Sub Form_Open(Cancel As Integer)
DoCmd.SelectObject acForm, Me.Name
DoCmd.MoveSize , , 13000, 9200
End Sub
と入れていました。エラーが出るので、指定せずに開くと画面いっぱいになってしまって、使いづらいです…
2.登録する時と修正する時に、登録ボタンと修正ボタンを押さないとできないようにすることはできますか。
(これができないような気がして、サブフォームで非連結のフォームを作ってみました)
いつも教えていただいて申し訳ありません。
よろしくお願いします。
当方のサンプルで確認してみましたが、
でエラーがでることはないですね。
ファイルの破損が疑われますので、修復・最適化をしてみるか、下記で紹介しているリフレッシュを試してみてください。
AccessのDBファイルを長期的に安定して使用するには - hatena chips
下記で紹介している方法が使えると思います。
レコード入力時に「保存」コマンドボタンでのみレコード保存できるようにする - hatena chips
わざわざ調べていただき、ありがとうございます。
やっぱりエラーがでるので、フォームをコピーしてから開いてみたらエラーが出ませんでした。
理由はわかりませんが、ありがとうございました。
登録ボタンと修正ボタンの方も、教えていただいたコードを使ってできるようになりました。
ありがとうございます。また一歩前に進みました。
やりたいことはあって、書籍やYoutubeやネットを色々みて勉強しているつもりなのですが、
知識が追い付かないので、なかなか思うようにできません…
お聞きしてばかりで本当に申し訳ないです。
また教えてください。よろしくお願いします。