dポイントプレゼントキャンペーン実施中!

Excel ユーザーフォームに50個のテキストボックスがあり、50個に入力された数字を足し
リアルタイムに合計を表示したい。
数が多いのでPrivate Sub TextBox1_Changeに計算式をいれるとチラツキます。
Application. ScreenUpdating=Falseを入れてもチラツキます。
クラスモジュールにすると一括でできると調べてたのですがうまくいきません。
教えてください。よろしくお願い申し上げます。
~Class1~
Private Sub Target_Change()
test1
End Sub

~Userform1~
Private ctrl(1 To 5) As New Class1
Private Sub UserForm_Initialize()

~モジュール~
Sub test1()
Dim i As Long
Dim total As Long
For i = 1 To 5
total = UserForm1.Controls("TextBox" & i).Value + total
Next i
End Sub

A 回答 (3件)

クラスのインスタンスにテキストボックスを代入する必要があります。


次の3点の訂正をお試しください。

①Class1に宣言・メソッドを追加
Private WithEvents Target As MSForms.TextBox
Public Sub setControl(tb As MSForms.TextBox)
Set Target = tb
End Sub

②UserForm1のUserForm_Initialize()に処理追加
For i = 1 To 3
ctrl(i).setControl Me.Controls("TextBox" & i)
Next i

③test1()を以下のとおり訂正
Public Sub test1()
Dim il As Integer
Dim total As Integer
Dim val As Integer
For i = 1 To 5
a = UserForm1.Controls("TextBox" & i).Value
If a <> "" Then total = Int(a) + total
Next i
UserForm1.Label1.Caption = total
End Sub
    • good
    • 0
この回答へのお礼

fairlady-hさん
ありがとうございました。

val as string
でうまくいきました。

お礼日時:2021/02/01 13:35

すいません何度も#1です。

4点目の訂正がありました。
③「val」は「a」

私の環境で簡易で試したので、他に誤りがあれば、質問者様のコードに合うよう変更してください。
    • good
    • 0

#1です。


私の回答に3点の誤りがありました。
1 ②「To 3」は「To 5」
2 ③「il」は「i」
3 「UserForm1.Label1.Caption = total」は私が試したコードなので任意に変更を
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A