2016-09-04 10 views
0

私は12のテキストボックス(1年の各月に1つ)でVBEにユーザーフォームを持っています。最初の12個のボックスのそれぞれの値の合計を表示し、他のテキストボックスの値が変更されたときに更新と再計算を行う追加のテキストボックスがあります。クラスとWithEventsを使用してテキストボックスの変更を検出する

この問題を解決するためのいくつかの助けに感謝します。私はクラスの以下のイベントセクションに入れて何がわからないよしかし

VBA: Detect changes in any textbox of the userform

私が実装しようとしているコードがでポストから取得されます。

注意:これは私が学んでいるので、クラスを使用する私の最初の試みです。

+0

を挿入しますか?役に立つ情報を提供していませんか?あなたの最新のコードの試行をアップロードする、あなたのユーザーから、私たちがあなたを助けることができる何か –

+0

ありがとうShai Rado。私は投稿を編集して、さらに詳しい情報を追加しました。うまくいけば、あなたはこの追加の情報を与えて助けてくれるでしょう。 – Albert

答えて

0

Class1の場合は、あなたのクラスモジュールの名前でユーザーフォームのUserform1名前、あなたはすべてのテキストボックスの値の合計が、その後TextBox13になりたい場合は、あなたのClass1モジュールで

Private WithEvents txtbox As MSForms.TextBox 
Dim ctlr As Control 
Public sum As Integer 

Public Property Set TextBox(ByVal t As MSForms.TextBox) 
    Set txtbox = t 
End Property 

Private Sub txtbox_Change() 
    sum = 0 
    For Each ctlr In UserForm1.Controls 
     sum = sum + Val(ctlr) 
    Next ctlr 
    UserForm1.TextBox13 = sum - Val(UserForm1.TextBox13) 
End Sub 
を挿入します

UserForm1モジュールには、何と

Private myEventHandlers As Collection 

Private Sub UserForm_Initialize() 
    Dim txtbox As Class1 

    Set myEventHandlers = New Collection 

    Dim c As Control 
    For Each c In Me.Controls 
     If TypeName(c) = "TextBox" Then 
      Set txtbox = New Class1 

      Set txtbox.TextBox = c 

      myEventHandlers.Add txtbox 
     End If 
    Next c 
End Sub 
+0

ありがとう@ArunThomas。あなたの投稿が示唆しているように、別のイベントプロシージャではなく、テキストボックスのいずれかの変更を検出するイベントプロシージャを1つ作成したいと考えています。私は投稿を編集し、いくつかの関連情報を追加しました。 – Albert

+0

私の更新された回答を参照してください、テストされたコードと私のために働く –

+0

完璧なソリューション@ArunThomas。とても有難い。 – Albert

関連する問題