• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:保存されない理由は?accessvba)

VBAを使用してフォームの高さを設定する方法

このQ&Aのポイント
  • Access VBAを使用してフォームの高さを変更する方法について教えてください。
  • フォームの上に設置されたサブフォームの高さをVBAで設定した後、フォームを閉じて再度開いても、設定した高さが保存されません。
  • サブフォームの高さを保存するためにはどうすればよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.5

No.1です。 すみません、記憶に頼って動作確認を怠っていました。 No.1の方法では、保存されないことを確認しました。 ご指摘ありがとうございます。 お詫びの上、別案を提示します。 (とりあえず、概略のみを提示しますが、必要であれば  コードも作成します) この方法であれば、VBAのソースコードを削除して、 デザインビューに切り替えることもできないMDEファイル であっても適用可能です。 【概要】  ・サブフォームの高さを、新設したテーブルに記録  ・フォームを開くときにその値を取得し、サブフォームの   高さに適用 <参考(以前のQ&A)>  http://okwave.jp/qa/q6814037.html 【手順の概略】 1)新規テーブルを作成  <フィールド構成の一例>   『フォーム名』『コントロール名』『プロパティ名』『値』   (ご質問のフォーム以外でも同様に、サブフォーム等   の高さや幅を変えることがある場合を想定) 2)フォームの『開くとき』イベントで、上記テーブルの値を  DLookupなどで取得し、サブフォームの高さに適用  (DLookup関数の第3引数にフォーム名などを指定して、   必要な設定値を取得) ・・・以上です。 大変失礼致しました。

wrpmxubb7985
質問者

お礼

回答ありがとうございました。

その他の回答 (4)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

No2、No3です。質問のプロパティはデザインビューで 設定する必要があります。したがってNo2のコードの 最初で、 DoCmd.OpenForm Me.Name, acDesign, , , , acHidden として acDesign すなわちデザインビューで開き、 その後、プロパティを設定しなおして保存して閉じ、 DoCmd.OpenForm Form_フォーム1.Name のようにして開き、設定を確認します。 その後、フォームを閉じ、再び開くと 閉じる前に設定したサブフォームの高さが 維持されている、ということです。

wrpmxubb7985
質問者

お礼

回答ありがとうございました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

No2です。 書き忘れましたが、No2のあと一旦フォームを閉じて 再び開くと、閉じる前に設定したサブフォームの 高さで開かれます。

wrpmxubb7985
質問者

お礼

回答ありがとうございました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

フォームを閉じて、閉じる前に設定した高さで再び開く ということで回答します。 コード中の Dim a As Long はクリックイベントの外に以下のように設定します。 なお、"サブフォーム"という名前はサブフォームを 表示するコントロール名で初期値は"埋め込み0"の ような名前です。したがって名前を変更して"サブフォーム" というようにサブフォーム表示コントロール名が変更 されているものとします。 また、メインフォームの名前は"フォーム1"としています。 もし、メインフォーム名が"ABCメインフォーム"というような ものであれば、以下のコードの中の"メインフォーム1"を "ABCメインフォーム"に置き換えてください。 以下のコードで少し特殊なのは、デザインビューにしたときに そのメインフォームの名前の取得はコード表のプロジェクト で表示されている名前を使うというところです。 Option Compare Database Option Explicit Dim a As Long Private Sub コマンド1_Click() a = Me.txt_高さ.Value DoCmd.OpenForm Me.Name, acDesign, , , , acHidden Form_フォーム1.Controls("サブフォーム").Height = a DoCmd.Save acForm, Form_フォーム1.Name DoCmd.Close acForm, Form_フォーム1.Name DoCmd.OpenForm Form_フォーム1.Name End Sub 以上、わからないところがあれば補足してください。

wrpmxubb7985
質問者

お礼

回答ありがとうございました。

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> CTRL+Sを押して、バツボタンでフォームを閉じて、 Officeでの「Ctrl+S」のショートカットキーは、   ExcelやWordでは「ファイル(ブック/ドキュメント)の保存」ですが、   Accessの場合は、「レコードの保存」 となっていて、このショートカットキーではフォームやテーブルなどの デザイン変更を保存することはできません。 ※但し、AccessでもVisual Basic Editor(VBE)の画面では、   「Ctrl+S」でフォームが保存される仕様になっています。 フォームやテーブル等をキーボード操作で保存する場合は、 「Alt+Fを同時押し」した後、「S」を押して下さい(=上書保存)。 (Accessでは、フォームやテーブルのデザインビューでこのショート  カットキーを使用した場合、そのMDBファイル全体ではなく、  現在アクティブにしているAccessObject(→フォームやテーブル  等の総称)だけが保存されます) また、サブフォームの高さを設定すると同時に保存もVBAで行う 場合は、高さを設定した後に以下のコードを記述すればOkです: DoCmd.Save  または DoCmd.Save acForm, Me.Name なお、以下のような記述をすれば、コードを記述したのとは別の AccessObjectを上書保存することも可能です。 (詳しくはヘルプを参照下さい) DoCmd.Save acTable, "テーブル1" (「テーブル1」という名前のテーブルを上書保存する場合の例) ・・・以上、参考まで。

wrpmxubb7985
質問者

お礼

回答ありがとうございました。