Board logo

標題: [發問] 請教UserForm內有多個TextBox要如何簡化程序(感謝) [打印本頁]

作者: changxxx    時間: 2015-2-14 09:06     標題: 請教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. .......
複製代碼

作者: GBKEE    時間: 2015-2-15 16:08

回復 1# changxxx

[attach]20261[/attach]

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
複製代碼

作者: changxxx    時間: 2015-2-19 16:58

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

報告:非常成功


[attach]20282[/attach]
作者: changxxx    時間: 2015-2-19 21:02

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

目前想設置
TextBox70為1到23的累計
TextBox71為24到46的累計
TextBox72為47到69的累計
不知要如何修改程序......謝謝您
作者: changxxx    時間: 2015-2-19 21:20

目前只會寫成這樣
  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
複製代碼

作者: linyancheng    時間: 2015-2-20 17:53

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

這樣寫應該可以。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)