
サブフォームの高さをVBAで調整するには
顧客の基本情報が表示されてるフォーム1に、その顧客が購入した商品の履歴一覧が
フォーム1の中のサブフォームに表示されるようになってます。
顧客が商品を20回購入した時の大きさ(高さ)にサブフォームをデザインビューで作成しました。
顧客が20回以下で商品を購入した場合、その高さにサブフォームを合わせたいんです。
VBAでサブフォームの高さを調整することは可能でしょうか?
現在、1回しか購入履歴がない顧客も、20回購入履歴がある顧客と同じ高さのサブフォームで表示されてます。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
#3です
訂正です(中ほどあたりの)
> その広げた部分に、フォーム「F1」をドラッグ&ドロップします。
↓
その広げた部分に、フォーム「F2」をドラッグ&ドロップします。
No.3
- 回答日時:
#2です。
サブフォーム部分の作り方が関係すると思いますので、
#2の検証用DBの作り方を以下に。(2007でのものですが・・・・)
(30分あれば十分検証できると思います)
・新規DBを作成します。
・テーブル「T0」「T1」2つを以下の内容で作成します。
テキスト型では、確認がしやすいように IME は「オフ」と設定しておきます。
テーブル「T0」
ID:数値型、長整数、主キー
名前:テキスト型(10文字程度)
電話:テキスト型(20文字程度)
テーブル「T1」
an:オートナンバー(主キー)
ID:数値型、長整数(「T0」と結びつけるもの)
商品名:テキスト型(10文字程度)
数量:数値型、長整数
まず、サブ側のフォームを作っていきます。
フォームウィザードを使って、
テーブル「T1」を元に、「商品名」「数量」を表示するようにして
表形式で作成し、フォーム名を「F2」にして編集します。
(「ID」は親を見ればわかるし、「an」は特に必要とは思わないので)
フォームのプロパティ「移動ボタン」を「いいえ」に、
「スクロールバー」を「垂直のみ」にします。
「挿入前処理」を「イベントプロシージャ」にして、右横の「...」をクリックします。
表示された部分を #2 の子側への記述例部分を、コピー&貼り付けし、
保存し、閉じておきます。
メイン(親)側のフォームを作っていきます。
フォームウィザードを使って、
テーブル「T0」を元に、すべてを表示するようにして
単票形式で作成し、フォーム名を「F1」にして編集します。
フォームの「レコードセレクタ」を「いいえ」にして詳細部分を広げます。
(余裕を持って広げておきます)
その広げた部分に、フォーム「F1」をドラッグ&ドロップします。
そうするとリンク親/子フィールドは共に「ID」が埋められるので、そこはそのままにして
「名前」部分を「FSUB」に変更します。
フォームのプロパティ「レコード移動時」を「イベントプロシージャ」にして
右横の「...」をクリックします。
表示された部分を #2 の親側への記述例部分を、コピー&貼り付けします。
確認上 20 件は多いので、
Const iShow As Long = 20
部分は
Const iShow As Long = 5
にしておきます。(表示のMAXは5行と言う事に・・・)
で、保存後、フォーム「F1」を起動します。
親側のレコードを作っていきます。
「ID」は自分で採番しないといけないので、重複しないものを何件か・・・
登録した部分で、サブフォームへ入力していきます。
5行になるまでは、チョコチョコと増えていくと思います。
途中、レコードを削除してみるとか・・・・
新規作成中にキャンセルしてみるとか・・・・
そこそこ動くと思います。
実際の入力操作を強固にするには、親の「ID」が未入力ならサブ側で編集させないとか・・・
記述の追加が必要です。
この場合の例としては、子側の処理で
Private Sub Form_BeforeInsert(Cancel As Integer)
Call Me.Parent.SetSubHeightB
End Sub
部分を
Private Sub Form_BeforeInsert(Cancel As Integer)
If (IsNull(Me.Parent.ID)) Then
Cancel = True
Else
Call Me.Parent.SetSubHeightB
End If
End Sub
にするとか・・・
サブフォームコントロールに、直にテーブル/クエリを表示する方法もありますが、
私はフォームをかえして入力チェック等を行うようにしています。
この辺は考え方次第だと思いますけど・・・
なお、サブフォーム側で、
新規登録はない、削除もない・・・となると、かなりスッキリとした記述になると思います。
参考にする/しない/したくない等々、自己責任でお願いします。
※ #2での
> サブフォームがデータシートであれば、
は、
サブフォームがデータシートビューであれば、
になります。
No.2
- 回答日時:
雰囲気だけで良いですか
サブフォームの高さをVBAで調整するには
http://detail.chiebukuro.yahoo.co.jp/qa/question …
をみると Access で良いのでしょうか
サブフォームに表示した件数分(MAX 20 件)だけを見るようにする
・・・で良かったでしょうか
解釈違いであればスルーという事に・・・
サブフォームコントロール名を「FSUB」と仮定します。
サブフォームに表示しているものは、帳票フォームであると仮定します。
リンク親子フィールドが設定されているものと仮定します。
サブフォームコントロールの高さを変更するので、メイン(親)側で処理させます。
親側への記述例)
Private Sub SubHeightSet(iAdd As Long)
Dim iCnt As Long
Dim iH As Long
' Const iRecMov As Long = 300 ' ★
Const iRecMov As Long = 0 ' ★
Const iShow As Long = 20
With Me.FSUB
With .Form
With .RecordsetClone
If (.RecordCount > 0) Then .MoveLast
iCnt = .RecordCount + iAdd
End With
If (.AllowAdditions) Then iCnt = iCnt + 1
If (iCnt > iShow) Then iCnt = iShow
iH = .Section(acHeader).Height _
+ .Section(acDetail).Height * iCnt _
+ .Section(acFooter).Height
End With
.Height = iH + iRecMov
End With
End Sub
Public Sub SetSubHeightA()
Call SubHeightSet(0)
End Sub
Public Sub SetSubHeightB()
Call SubHeightSet(1)
End Sub
Private Sub Form_Current()
Call SetSubHeightA
End Sub
子側への記述例)
Private Sub Form_BeforeInsert(Cancel As Integer)
Call Me.Parent.SetSubHeightB
End Sub
Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
Call Me.Parent.SetSubHeightA
End Sub
Private Sub Form_AfterDelConfirm(Status As Integer)
If (Status <> acDeleteOK) Then
Call Me.Parent.SetSubHeightA
End If
End Sub
Private Sub Form_Undo(Cancel As Integer)
Call Me.Parent.SetSubHeightA
End Sub
★部分、サブフォームに「移動ボタン」を表示している時にはそれなりの高さを設定します。
※ 新規の行がなかったら・・・・等で不要になるものもあります。
(2007 で動きを見てみましたけど・・・・)
他のタイミングでやる場合でも、
SetSubHeightA / SetSubHeightB を使い分ければよいと思います。
メインの高さに余裕がない場合は、
メインを大きくしてからサブフォームコントロールの高さを広げます。
でないと、エラーになったような・・・・
サブフォームがデータシートであれば、
RowHeight を設定し、レコード数 + 1 分(20 の範囲で)を・・・
見出し分と移動ボタン分を足しこめば良いと思います。
RowHeight の既定は -1 のようで、デフォルト値が使われる見たいな雰囲気です。
デフォルト値はどこかにあるのでしょう。
自分で設定してやった方が楽そうです。
データシートビューのセルサイズを固定する : Access裏技Tips
http://www.accessclub.jp/urawaza/60.html
参考にする/しない/したくない等々、自己責任でお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ブラウザ) Mycrosoft Edge フォームの履歴を完全に削除したい 3 2022/08/11 09:59
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- その他(Microsoft Office) Excelで総数量を変動させたい 2 2022/11/04 23:49
- Excel(エクセル) エクセル 多数のファイルから値を抜き出したい 4 2022/12/12 16:49
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- 企画・マーケティング オペレーターが顧客の情報を代理入力していいものでしょうか 1 2022/07/15 11:29
- その他(開発・運用・管理) マイクロソフト製品のライセンス販売で困ってます 1 2022/06/30 19:52
- その他(データベース) accessについて 2 2022/05/31 16:58
- Chrome(クローム) 入力フォームの履歴を消したい 2 2023/06/29 13:02
- 会社・職場 うちはメーカーで、販売店に商品委託してます。販売店Aが本体商品を顧客に提示しましたが、その顧客は販売 1 2022/10/07 09:06
このQ&Aを見た人はこんなQ&Aも見ています
-
フォームの高さを数値で指定したいのですが
Excel(エクセル)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
アクセスのフォームのビューが表示されないのですが、
その他(データベース)
-
-
4
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
5
アクセスvbaでエクセルブックを保存
その他(Microsoft Office)
-
6
実行時エラー3131 FROM 句の構文エラーです について
Access(アクセス)
-
7
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
-
8
Accessレポートの詳細の高さ(VBA)
Excel(エクセル)
-
9
「#エラー」の回避
Access(アクセス)
-
10
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
11
フォームウィンドウを最前面に表示したい(ACCESS)
Microsoft ASP
-
12
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
13
Accessでテーブルの値をテキストボックスに代入するには?
Access(アクセス)
-
14
Access VBA標準モジュールについてです。
Access(アクセス)
-
15
Access2003 クエリで、空の列は作れますか?
Access(アクセス)
-
16
ACCESS フォームからサブフォームのデータを更新・入力したい
Access(アクセス)
-
17
サブフォームのイベント取得
Visual Basic(VBA)
-
18
Access 複数フォームを開き、画面の最上面にしたいフォームをコント
その他(データベース)
-
19
フォーム データシートビューで文字色を変えたい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSにて
-
ACCESS──メインフォームでサブ...
-
Accessで埋め込んだサブフォー...
-
クエリで出来た表にチェックボ...
-
Access SUMの結果が何もない時...
-
親・子リンクフィールドの設定...
-
サブフォームのあるフォームか...
-
Accessでセレクタをダブルクリ...
-
Access Dsum関数
-
ACCESSのサブフォームコピーに...
-
ACCESSで条件によってサブフォ...
-
Access サブフォームのレコード...
-
access
-
サブフォームを非表示させる方...
-
アクセスでエラー・・・
-
Access VBAでメインフォームと...
-
【ACCESS2000】サブフォームの更新
-
ACCESS サブ・メインフォーム...
-
passwordが入れられません・・・・
-
Access レポート印刷するときに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サブフォームに対してGoToRecor...
-
クエリで出来た表にチェックボ...
-
親フォームからサブフォームの...
-
サブフォームを非表示させる方...
-
ACCESSにて
-
ACCESS──メインフォームでサブ...
-
Accessで埋め込んだサブフォー...
-
ACCESSのフォームで列固定?
-
皆さん使っているブラウザを教...
-
サブフォームのあるフォームか...
-
ACCESS VBA メインフォーム及び...
-
親・子リンクフィールドの設定...
-
Access2007 ラベルの削除がで...
-
ACCESSで条件によってサブフォ...
-
access vba サブフォームに条件...
-
Accessでセレクタをダブルクリ...
-
ACCESSのサブフォームコピーに...
-
Access 登録ボタンからサブフォ...
-
Access フォームで条件抽出し...
-
access フォーム上で複数行の...
おすすめ情報