質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

258閲覧

access2021 サブフォーム内のレコード数によってサブフォームの高さを調整したい

syuu07

総合スコア11

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2024/04/05 01:52

編集2024/04/06 01:35

実現したいこと

メインフォームに帳票型のサブフォームを挿入しているのですが、サブフォーム内のレコード数によってサブフォームの高さを調整するにはどのようなVBAを記載したら良いでしょうか?
ご教授のほどお願い致します。

発生している問題・分からないこと

メインフォームに帳票型のサブフォームを挿入しているのですが、サブフォームのレコード数が統一されていないため、現状のフォームではサブフォームの高さがレコードの数によって合わせる必要があります。
Form_OpenイベントにVBAを記入しサブフォーム内のレコード数に合わせてサブフォームの高さを変えたいです。

現状
メインフォーム ID1
サブフォーム(レコード数 5 高さ 6cm)

メインフォーム ID2
サブフォーム(レコード数 10 高さ 6cm)
※メインフォームのレコードを変えてもサブフォームの高さが変わらない

目指すこと
メインフォーム ID1
サブフォーム(レコード数 5 高さ 6cm)

メインフォーム ID2
サブフォーム(レコード数 10 高さ 12cm)
※メインフォームのレコードを変えるとサブフォームのレコードの数によって高さが変わる

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10145294170

似たような質問がありそれを参考に作成したのですが以下のエラーが発生します。


実行エラー '424';
オブジェクトが必要です。

作成内容

Private Sub Form_Open(Cancel As Integer)
Dim wk

With 見積加工

'サブフォームのレコード件数取得
wk = .Form.RecordsetClone.RecordCount

'↓リミッター
If wk > 10 Then wk = 10

'サブフォーム縦調整
.Height = (wk + 1) * .Form.Section("詳細").Height

End With

End Sub

イメージ説明

補足

Microsoft Access 2021(.accdb)

・ODBC接続によりSQL Serverと接続しています
ODBC  プラットフォーム 32/64ビット ドライバー  SQL Server

・リンクテーブルにてODBC接続

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

VBA

1With サブフォーム名(サブフォームを入力)

おそらく、上記の部分のサブフォームコントロールの指定方法が間違っているのでしょう。

まず、サブフォームではなく、サブフォームコントロールを指定する必要があります。
確認法は下記のリンク先を参照ください。

サブフォームとサブフォームコントロールの違いとは? - hatena chips

正しくサブフォームコントロールが指定出来たらエラーはでなくなると思いますが、
下記の点を考慮する必要があります。

懸念点
フォームを開くときのイベント(Form_Open)では、先頭レコードのレコード件数で高さが設定される。レコード移動してサブフォームのレコード件数が変化しても高さは固定のままである。
対策
フォームのレコード移動時のイベント(Form_Current)で実行する。

懸念点
サブフォームにフォームヘッダー、フォームフッターが表示されているならその高さも考慮する必要がある。
移動ボタンを表示させているなら、その高さも考慮する必要がある。
対策
サブフォームコントロールの高さを、上記の高さも加算した高さに設定する。

コード例

VBA

1Private Sub Form_Current() 2 Dim wk As Long 3 4 With Me.サブフォームコントロール名 5 6 'サブフォームのレコード件数取得 7 wk = .Form.RecordsetClone.RecordCount 8 9 '↓リミッター 10 If wk > 10 Then wk = 10 11 12 'サブフォーム縦調整 13 .Height = (wk + 1) * .Form.Section("詳細").Height + .Form.Section("フォームヘッダー").Height _ 14 + .Form.Section("フォームフッター").Height + 300 15 16 End With 17 18End Sub

フォームヘッダー/フッターの有無で修正してください。
また、少し高さに余裕があった方がみやすいので、定数の加算量で調整してください。

投稿2024/04/06 00:23

編集2024/04/06 02:26
hatena19

総合スコア33740

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syuu07

2024/04/06 01:37

コメントありがとうございます。 上記のサイトを参考に次のように作成しました。 Private Sub Form_Current() Dim wk As Long With 見積加工 'サブフォームのレコード件数取得 wk = .Form.RecordsetClone.RecordCount '↓リミッター If wk > 10 Then wk = 10 Debug.Print wk; .Form.Section("詳細").Height 'サブフォーム縦調整 .Height = (wk + 1) * .Form.Section("詳細").Height + .Form.Section("フォームヘッダー").Height _ + .Form.Section("フォームフッター").Height + 300 End With End Sub しかし、同様のエラーが発生します。 実行エラー '424'; オブジェクトが必要です。 追記画像の通りサブフォームコントロール名は「見積加工」のはずですがうまくいきませんでした......。 何かほかに原因があるでしょうか?
hatena19

2024/04/06 02:25

回答のコード、デバッグ用の無駄なコードも含まれていたので修正しました。 また、あくまでコード例ですので、コードの意味を理解して実態にあわせて修正して利用してください。 そのうえで、エラーが出た場合、デバッグボタンを押して反転表示されるコードがどこか教えてください。
syuu07

2024/04/06 04:03

コメントありがとうございます。 エラーが発生するのはこのコードです。 With 見積加工 エラーメッセージ メソッドまたはデータ メンバが見つかりません。 同じサブフォームでのエラーです。 何が原因なんでしょうか?
hatena19

2024/04/06 06:10

コードはメインフォームのモジュールに記述してますか。 ひょっとしてサブフォームのモジュールに記述しているとかではないですか。
syuu07

2024/04/06 07:05

コメントありがとうございます。 メインフォームに記述するとエラーがなく実行できました。 理解不足で申し訳ございません......。 ここまで答えてくださってありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問