- ベストアンサー
VBAのTextBox自動調整マクロ | 質問
- VBAのフォーム上にTextBoxたくさんあるとき、文字の大きさを自動調整するマクロを使っています。しかし、TextBoxが多くなるため、プログラムが非常に長くなってしまいます。
- 質問者は過去の質問などを参考に試してみましたが、うまくまとめられませんでした。どのような方法があるか、アドバイスを求めています。
- VBAのフォーム上にTextBoxがたくさんあり、文字列の長さに応じてフォントサイズを自動調整するマクロを作成しています。しかし、TextBoxの数が多いため、プログラムが長くなってしまいました。どのようにまとめることができるかアドバイスをお願いします。
- みんなの回答 (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」を実際のテキストボックス名に合わせて変更してください
お礼
忙しい中ありがとうございます。 わかりやすく修正個所も書いてあったので とても助かりました。 ありがとうございました。