
Microsoft Excel 2013 の VBAのフォーム機能を利用してます。
TextBoxにセルを参照して文字が入ってくるようにしています。、
参照するセルによって文字列の長さが違うので
文字の大きさを自動調整してくれるマクロを使っているのですが
TextBoxがいっぱいあるため、以下のように非常に長いプログラムになってしまいました。
Private Sub textBox1_Change()
Const InitialFontSize As Double = 40 '初期フォントサイズ
Dim BufWidth As Double
Dim BufHeight As Double
With Me.TextBox1
.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
TextBox2~67は繰り返し
Private Sub textBox67_Change()
Const InitialFontSize As Double = 40 '初期フォントサイズ
Dim BufWidth As Double
Dim BufHeight As Double
With Me.TextBox67
.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
過去の質問等を参考にいろいろ試してみたのですが
自分の力不足でうまくできませんでした。
うまくまとめられるような方法等ありましたらお知恵を拝借できないでしょうか
よろしくお願い致します
No.1ベストアンサー
- 回答日時:
ほぼ、この回答者様のコードのままですが。。。
以下のコードはテキストボックス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」を実際のテキストボックス名に合わせて変更してください

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAのフォームでTextBoxがいっぱいある時
Access(アクセス)
-
複数のテキストボックスのカンマ処理
Visual Basic(VBA)
-
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
-
4
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
5
カンマ区切り
Visual Basic(VBA)
-
6
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
7
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
8
テキストボックスのvalueとtextの違い
Visual Basic(VBA)
-
9
VBA TEXTBOXテキストボックスの文字の大きさが一定にならない。 ユーザーフォームでテキストボ
Visual Basic(VBA)
-
10
【エクセル】複数のTextBoxに共通するChangeイベントを簡潔に書きたい
Excel(エクセル)
-
11
全てのオブジェクトのプロパティーを一気に変更する方法
Visual Basic(VBA)
-
12
ユーザーフォームで数字にカンマを付けたい
Excel(エクセル)
-
13
TextBoxから数字が文字として入力される?
Visual Basic(VBA)
-
14
ユーザーフォーム上にある「テキストボックス」に小数が入力できない
Excel(エクセル)
-
15
どこにもフォーカスを当てたくない
Access(アクセス)
-
16
Excel vbaで複数のテキストボックスの足し算
Visual Basic(VBA)
-
17
Vba テキストボックス文字を右端から配置していく方法
Visual Basic(VBA)
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ギターのTAB譜の記号 N.C....
-
外車 色コード BMW 色コード オ...
-
この写真の状態(銅線剥き出し)...
-
Gmailを開いた状態でもうひとつ...
-
ギターのコード弾きと単音弾き...
-
Dadd11というコードについて
-
輸入盤CDの見分け方
-
草刈の際に電源ケーブルを切断...
-
徹子の部屋のテーマ曲を演奏し...
-
ピアノの・・・・
-
500マイルのアルペジオ教えてく...
-
Dir関数のDo Whileステートメン...
-
VBA ダブルクリックしたときにc...
-
ベース キー変更について
-
ピアノの楽譜の上にあるときど...
-
和音を聞き取れません
-
ピッチ変更でハモリの練習(aud...
-
昔セガのCMで使われてた「セー...
-
音楽の質問です。 Queenの曲な...
-
「マイナー」という言葉は失礼...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
外車 色コード BMW 色コード オ...
-
Gmailを開いた状態でもうひとつ...
-
Dir関数のDo Whileステートメン...
-
ギターのTAB譜の記号 N.C....
-
だいたいのスーパーでは天ぷら...
-
先日、電気コードに熱いお湯か...
-
【マクロ】PasteSpecialメソッ...
-
草刈の際に電源ケーブルを切断...
-
【HULFT】 utllist とutladmin
-
VBA ダブルクリックするたびに...
-
Dadd11というコードについて
-
この写真の状態(銅線剥き出し)...
-
マイナーの裏コードは存在する?
-
【EXCEL-VBA】PDFファイルを開...
-
Jeff Beck「Red Boots」のコー...
-
ドライアーのコードから煙が出...
-
実行時エラー3251対応処理方法
-
onって何ですか?
-
流用の定義について
-
岡林信康の「愛する人へ」のギ...
おすすめ情報