• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAのフォーム上にTextBoxたくさんあるとき)

VBAのTextBox自動調整マクロ | 質問

このQ&Aのポイント
  • VBAのフォーム上にTextBoxたくさんあるとき、文字の大きさを自動調整するマクロを使っています。しかし、TextBoxが多くなるため、プログラムが非常に長くなってしまいます。
  • 質問者は過去の質問などを参考に試してみましたが、うまくまとめられませんでした。どのような方法があるか、アドバイスを求めています。
  • VBAのフォーム上にTextBoxがたくさんあり、文字列の長さに応じてフォントサイズを自動調整するマクロを作成しています。しかし、TextBoxの数が多いため、プログラムが長くなってしまいました。どのようにまとめることができるかアドバイスをお願いします。

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

http://okwave.jp/qa/q261042.html ほぼ、この回答者様のコードのままですが。。。 以下のコードはテキストボックス8個「TextBox1~8」を 「UserForm1」に配置した場合となります。 ■標準モジュールを挿入して、以下のコードを貼付   (フォームを表示するためだけのものです) Sub フォーム表示()   Load UserForm1   UserForm1.Show vbModeless End Sub ■クラスモジュールを挿入して、以下のコードを貼付 Private WithEvents myText As MSForms.TextBox Private myIndex As Integer Public Sub S_setText(NewText As MSForms.TextBox, Index As Integer)   Set myText = NewText   myIndex = Index End Sub Private Sub myText_Change() Const InitialFontSize As Double = 40 Dim BufWidth As Double Dim BufHeight As Double With UserForm1.Controls("TextBox" & myIndex) '★   .Font.Size = InitialFontSize   BufWidth = .Width   BufHeight = .Height   .AutoSize = True   While .Width > BufWidth     .Font.Size = .Font.Size - 2.5   Wend   .AutoSize = False   .Width = BufWidth   .Height = BufHeight End With End Sub ■ユーザーフォームのコードに以下のコードを貼付 Private myTextArray(1 To 8) As New Class1 '☆ Private Sub UserForm_Initialize()   Dim i As Integer   For i = 1 To 8 '☆     myTextArray(i).S_setText UserForm1.Controls("TextBox" & i), i '★   Next End Sub ■貼り付けたコードの修正 末尾が☆の2箇所の「8」を実際のテキストボックスの数に合わせて変更してください 末尾が★の2箇所の「UserForm1」を実際のユーザーフォーム名に合わせて変更してください 末尾が★の2箇所の「TextBox」を実際のテキストボックス名に合わせて変更してください

garasi0120
質問者

お礼

忙しい中ありがとうございます。 わかりやすく修正個所も書いてあったので とても助かりました。 ありがとうございました。

関連するQ&A