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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- その他(プログラミング・Web制作) ボールの動きがスムーズに動いてかつ目盛り線描画を維持するためには 4 2023/05/31 10:01
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) QRコード作成マクロについて 3 2022/11/26 16:55
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
複数のテキストボックスのカンマ処理
Visual Basic(VBA)
-
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
VBAのフォームでTextBoxがいっぱいある時
Access(アクセス)
-
-
4
カンマ区切り
Visual Basic(VBA)
-
5
VBA テキストボックスの計算
Visual Basic(VBA)
-
6
ユーザーフォームで数字にカンマを付けたい
Excel(エクセル)
-
7
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
8
VBA テキストボックスに3桁カンマ表示させたい
その他(Microsoft Office)
-
9
【エクセル】複数のTextBoxに共通するChangeイベントを簡潔に書きたい
Excel(エクセル)
-
10
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
11
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
12
Excel vbaで複数のテキストボックスの足し算
Visual Basic(VBA)
-
13
Vba テキストボックス文字を右端から配置していく方法
Visual Basic(VBA)
-
14
VBA。複数のChangeイベントをまとめる方法
Visual Basic(VBA)
-
15
複数のテキストボックスに同じ処理をしたい
Visual Basic(VBA)
-
16
TextBoxから数字が文字として入力される?
Visual Basic(VBA)
-
17
Excel VBA ユーザーフォームのテキストボックスで
Visual Basic(VBA)
-
18
EXCEL VBAのユーザーフォームに引数を渡す方法について
Excel(エクセル)
-
19
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
20
Excel vba ユーザーフォームテキストボックス内の小数点表示
Visual Basic(VBA)
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JANコード、ITFコードの作成
-
VBA ダブルクリックするたびに...
-
JAN コードとITFコードの違い...
-
先日、電気コードに熱いお湯か...
-
Dadd11というコードについて
-
ギター初心者です ただ君に晴れ...
-
Excel VBA Tabコードの出力
-
ピアノで押さえる場合の分数コ...
-
【EXCEL-VBA】PDFファイルを開...
-
VBAのフォーム上にTextBoxたく...
-
おしえてください!
-
[やさしさとして想い出として ...
-
Paul McCartney All Of You
-
携快電話9で付属のUSBコードが...
-
キングクリムゾンの「スターレ...
-
Excel VBAでのヘッダー設定につ...
-
Jeff Beck「Red Boots」のコー...
-
ギターのTAB譜の記号 N.C....
-
EXCELのハイパーリンク先の変更...
-
Accessに対するGrep検索
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ギターのTAB譜の記号 N.C....
-
VBA ダブルクリックするたびに...
-
マイクロソフト 一時使用コード...
-
パソコンから出てる有線コード...
-
JAN コードとITFコードの違い...
-
Gmailを開いた状態でもうひとつ...
-
片側がUSBで片側がイヤホンジャ...
-
ドライアーのコードから煙が出...
-
JANコード、ITFコードの作成
-
マイナーの裏コードは存在する?
-
◎PPMのコードをお教えいただ...
-
DLookupがうまく出来ません
-
草刈の際に電源ケーブルを切断...
-
JISコードがわからない
-
『車の中でかくれてキスをしよ...
-
コードを白く塗りたい
-
【EXCEL-VBA】PDFファイルを開...
-
【マクロ】PasteSpecialメソッ...
-
CODE関数から他の文字コードの...
-
サイトによってコード譜が違う...
おすすめ情報