• 締切済み

access テキストボックス自動高さ調整

帳票フォームにてデータを表示しています データの中でメモ型を配置しており、長い文章が書くときもあれば、短く済むときもあります 長い文章に合わせてテキストボックスの高さを大きめにとっておけばよいのですが、そうするとスクロールするのが大変なのと見栄えが悪い為、文字数に合わせて高さが変わればいいなと思いネットで検索してみました http://www.accessclub.jp/bbs3/0146/superbeg50129.html 結論的にはここに書いてある事をやりたいのですが。。。 VBAの文章をどこに書くかまでは書いておらず困っております^^; どなたかアドバイスをいただけないでしょうか?

みんなの回答

  • hogya
  • ベストアンサー率67% (49/73)
回答No.4

難儀そうですね。 要件としてはAccessの機能がある程度わかった上での応用編みたいなものですからね。 コードを書く上での方法としては、最低限の動作の確認できるコード(これをミニマムコードと言って私の提示したサンプルのようなものです)にご自分のコードを動作を確認しながら足していくという方法もあります。 この方法はどこかで期待通りに動かなくなった時点がピンポイントで特定できます。 最初のご質問の方法でやる場合も同様な方法で試すことができます。 私からのアドバイスとしては以上になりますが、がんばってください。

9tree
質問者

お礼

わかっていた事ですがやはりまだまだ勉強が足りないですね・・・ もう少し修行してみます おつきあいありがとうございました

  • hogya
  • ベストアンサー率67% (49/73)
回答No.3

すいません、もうひとつ。 デザインモード等で手動でサイズを変更して保存したりした場合もうまくいかない場合があります。対策として、ラベルの初期化のコードを追加してみました。まず先にこのラベルの初期化を試してみてください。 (これは私の考慮漏れですね。申し訳ない。) ■1つめのフォーム(フォーム2を開くフォーム)のボタンのクリック時 Private Sub コマンド1_Click() Dim FName As String Dim myLabel As Label FName = "フォーム2" Application.Echo False '描画停止 DoCmd.OpenForm FName, acDesign 'デザインモードで開く Set myLabel = Forms(FName).ラベル1 'ラベルの初期化 myLabel.Caption = "" myLabel.SizeToFit myLabel.Caption = "あいうえお" & vbCrLf & "かきくけこ" & vbCrLf & "さしすせそ" & vbCrLf & "たちつてと" & vbCrLf myLabel.SizeToFit DoCmd.Close , , acSaveYes '保存 Application.Echo True '描画開始 DoCmd.OpenForm FName 'Normalモードで開く End Sub

9tree
質問者

補足

新しい文を入れてみました テストで作ったのは変わりなく開きます しかしやはり自分が作ったものは前回と全く結果は同じでした ボタンで開く以前にデザインビューからフォームビューに切り替えたらエラーが発生します 難儀ですね^^;

  • hogya
  • ベストアンサー率67% (49/73)
回答No.2

実際に今のシステムがどうしているかや、どううまくいかないのか正確な実際の情報がわからないので(汗)思いつくところでは下記ぐらいですね。 ・フォームヘッダーではなく、ページヘッダーにしていた。 ・フォームといいつつ実はレポートでも表示しようとしていた ・実はデータとの連結項目で数値項目に文字を代入していた、etc・・・ お力になれずすいません。

9tree
質問者

補足

・フォームヘッダーではなく、ページヘッダーにしていた。 →確認しましたがフォームヘッダーですね というかページヘッダーがわかりません^_^; ・フォームといいつつ実はレポートでも表示しようとしていた →レポートでは表示してないですね ・実はデータとの連結項目で数値項目に文字を代入していた →書式は空欄です。特に数値になっているわけではないようです ご考慮くださってありがとうございました

  • hogya
  • ベストアンサー率67% (49/73)
回答No.1

それほど難しいことを考えなくてすむ簡易的な方法を紹介します。 要はラベルのサイズ自動調整機能を使って計算されたサイズでテキストボックのサイズを決めるというものです。 単に全文を見せたいだけのような仕様の場合は使えるケースがあります。ご参考までに。 フォームをふたつ用意します。 1つめのフォームにはコマンドボタンをひとつ配置。 2つめのフォームにはラベルを1つとテキストボックスを1つそれぞれ小さめに配置(大きくすると動作確認にならないので)。 あとはイベントに下記の内容を記述します。 ■1つめのフォーム(フォーム2を開くフォーム)のボタンのクリック時 Private Sub コマンド1_Click() Dim FName As String Dim myLabel As Label FName = "フォーム2" Application.Echo False '描画停止 DoCmd.OpenForm FName, acDesign 'デザインモードで開く Set myLabel = Forms(FName).ラベル1 myLabel.Caption = "あいうえお" & vbCrLf & "かきくけこ" & vbCrLf & "さしすせそ" & vbCrLf & "たちつてと" & vbCrLf myLabel.SizeToFit DoCmd.Close , , acSaveYes '保存 Application.Echo True '描画開始 DoCmd.OpenForm FName 'Normalモードで開く End Sub ■2つめのフォーム(フォーム1から開かれるフォーム)のオープン時 Private Sub Form_Open(Cancel As Integer) With Me.テキスト1 .Value = Me.ラベル1.Caption .Width = Me.ラベル1.Width .Height = Me.ラベル1.Height End With Me.ラベル1.Visible = False End Sub

9tree
質問者

補足

回答ありがとうございます。 試しにフォーム1,2を作ったら確かになりました。 だもんで、これを自分が作ってるものに組み込んだのですがうまく行かず。。。。 ちなみに開くフォームの形としてはラベルをヘッダーに持ってきております。 これが原因かなぁ~と思って、別途テキストボックスをつくってみたんですが、 「このオブジェクトに値を代入することはできません」とエラーが出て、 .Value = Me.ラベル1.Captionの部分が反転します。。。 何が悪いのでしょうか^_^;

関連するQ&A