返回列表 上一主題 發帖

[發問] 請教UserForm內有多個TextBox要如何簡化程序(感謝)

[發問] 請教UserForm內有多個TextBox要如何簡化程序(感謝)

目前有70個TextBox並以第70為1~69的累計
輸入TextBox並按下Enter後就計入到TextBox70內因此在程序內寫入以下69個程序
請教如何簡化

目前尚須加入
1.按下滑鼠後清空TextBox內容
2.按下鍵盤"往上鍵","往下鍵"
因此程序會變得很長所以特來請教簡化方式.....感恩
  1. Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  2. If KeyCode = 13 Then TextBox70.Text = Val(TextBox70.Text) + Val(TextBox1.Text)
  3. End Sub

  4. Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  5. If KeyCode = 13 Then TextBox70.Text = Val(TextBox70.Text) + Val(TextBox2.Text)
  6. End Sub
  7. .......
複製代碼

回復 1# changxxx



UserForm的程式碼
  1. Option Explicit
  2. Dim UserForm_Text(1 To 69) As New Class1 '宣告變數為新的物件模組
  3. Private Sub UserForm_Initialize()
  4.     Dim i As Integer
  5.     For i = 1 To UBound(UserForm_Text)
  6.         Set UserForm_Text(i).Class_TextBox = Controls("textbox" & i)
  7.         '物件模組的Class_TextBox 設定為 Controls("textbox" & i)
  8.     Next
  9. End Sub
複製代碼
物件類別模組的程式碼
  1. Option Explicit
  2. Public WithEvents Class_TextBox As MSForms.TextBox
  3. 'WithEvents 選擇性引數。表示 varname 是物件變數的關鍵字,且用來對應 ActiveX 物件所引發的事件。
  4. '僅適用於物件類別模組中。
  5. '您可以用 WithEvents 來個別宣告變數,但不可用來建立陣列,也不可與 New 同時使用。
  6. Private Sub Class_TextBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  7.     With Class_TextBox
  8.         If KeyCode = 13 Then .Parent.TextBox70.Text = Val(.Parent.TextBox70.Text) + Val(.Text)
  9.     End With
  10. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

:loveliness: .....非常感謝G大熱情幫忙

報告:非常成功


TOP

又無步了...只好再次求助G大
感謝萬分

目前想設置
TextBox70為1到23的累計
TextBox71為24到46的累計
TextBox72為47到69的累計
不知要如何修改程序......謝謝您

TOP

目前只會寫成這樣
  1.     spTB = Val(Replace(Class_TextBox.Name, "TextBox", ""))
  2.     With Class_TextBox
  3.         If KeyCode = 13 Then
  4.             If spTB < 24 Then
  5.                 .Parent.TextBox70.Text = Val(.Parent.TextBox70.Text) + Val(.Text)
  6.             ElseIf spTB > 23 And spTB < 47 Then
  7.                 .Parent.TextBox71.Text = Val(.Parent.TextBox71.Text) + Val(.Text)
  8.             Else
  9.                 .Parent.TextBox72.Text = Val(.Parent.TextBox72.Text) + Val(.Text)
  10.             End If
  11.         End If
  12.     End With
複製代碼

TOP

本帖最後由 linyancheng 於 2015-2-20 18:01 編輯

這樣寫應該可以。

TOP

        靜思自在 : 成功是優點的發揮,失敗是缺點的累積。
返回列表 上一主題