Board logo

標題: [發問] 請問一個重覆程式碼使用上的問題 [打印本頁]

作者: mygod0403    時間: 2012-5-11 14:47     標題: 請問一個重覆程式碼使用上的問題

不知道該怎麼下標題{:3_60:} ,sorry

狀況是這樣

我設計了一個表單,上面有10個textbox控制項
另外還有一個label,做為統計這10個textbox的總和
然後我想當任一個textbox的值改變時
label的內容都能即時更新
目前知道可以用textbox_change處理
問題是
難道10個 textbox的change事件都要寫上相同的程式碼嗎?

麻煩了,謝謝~~~
作者: register313    時間: 2012-5-11 23:26

回復 1# mygod0403

[attach]10910[/attach]

表單UserForm1程式碼
  1. Dim col As New Collection
  2. Private Sub UserForm_initialize()
  3. Dim myc As cmds
  4. For i = 1 To 10
  5.   Set myc = New cmds
  6.   Set myc.cmd = Me.Controls("Textbox" & i)
  7.   col.Add myc
  8. Next
  9. Set myc = Nothing
  10. End Sub
複製代碼
物件類別模組cmds程式碼
  1. Public WithEvents cmd As MSForms.TextBox
  2. Private Sub cmd_change()
  3. For i = 1 To 10
  4.   data = data + Val(UserForm1.Controls("Textbox" & i))
  5.   UserForm1.Label1.Caption = data
  6. Next
  7. End Sub
複製代碼

作者: icestormer    時間: 2012-5-12 09:59

回復 2# register313


  請問 像您所寫的程式碼 也是可以運用在工作表上的設置好的Textbox 嗎?
作者: oobird    時間: 2012-5-12 10:15

大同小異,但不能完全套用。
作者: icestormer    時間: 2012-5-12 10:33

大同小異,但不能完全套用。
oobird 發表於 2012-5-12 10:15



   那要怎改呢? 能不能教一下 我也有相同的問題 只是在工作表上而已(差在我的是用SpinButton)   謝謝你了
作者: oobird    時間: 2012-5-12 10:38

不好意思,沒有文件該怎麼幫你改?
作者: icestormer    時間: 2012-5-12 11:47

本帖最後由 icestormer 於 2012-5-12 13:32 編輯

回復 6# oobird

[attach]10913[/attach]
對不起 現在附上檔案
檔案中 有5個spinebutton
作用:由1到5 分別 對A5到E5 都是相同作用只是欄別不同,其它程式碼完全一樣

另外 有一個奇怪的問題. 如下圖(4個圖)
第一及第二張圖 都有指定巨集 及控制


===============================================================
但第三及第四張圖郤沒有.. 不管怎弄都找不到
第三及第四張就是在弣檔上的spinebutton  ,請問要怎把指定巨集及控制弄出來?(我是用excel2003)


================================================================
由於看不懂 下方這種語法,如果想要弄懂,請問是要去那裡學習或是有什麼好的學習書可以買呢?發現書店中有關VBA的書很少(目前買的4本 也都沒有介紹到這部份)
1:excel vba 功能索引式參考手冊
2:excel 超圖解 VBA 基礎講座
3:  .............................. 塵用講座
4:辦公室提昇效率必備EXCEL VBA 技法256招
---------------------------------------------------------------------------------------------------------------------------------------------------
Public WithEvents txb As MSForms.TextBox
Dim txbs(11 To 49) As txb
Dim col As New Collection

作者: oobird    時間: 2012-5-12 15:44

本帖最後由 oobird 於 2012-5-12 16:49 編輯

spinebutton 與微調按鈕是不一樣的東西。
圖一圖二是表單工具的微調按鈕,所以有這個選項
下面的是控制工具的spinebutton ,不能混為一談
以下是用表單工具做的例子[attach]10918[/attach]
作者: icestormer    時間: 2012-5-12 20:06

本帖最後由 icestormer 於 2012-5-12 22:26 編輯

回復 8# oobird


有幾個問題如果oobird 或有高手會  麻煩教一下, 感謝
這個檔是 我把oobird 大提供的,一邊理解語法一邊改的,但也產生了幾個問題
先附上檔案[attach]10928[/attach]
第一個問題:
Private Sub Workbook_Open()
   Dim ctl As Shape
   For Each ctl In Sheet1.Shapes
       If ctl.Type = 8Then  
          ctl.OnAction = "Btn_Click" <<此行跟使用  call Btn_click 有什麼我看不出來的差別嗎?(執行起來都是一樣呢)
         End If
   Next ctl
End Sub
第二個問題:
Sub Btn_Click()

    按鈕名 = Application.Caller
    n = Val(Right(Application.Caller, 1))<<application.caller 實際作用還是不懂 不知能不能教一下
    長度 = Len(Application.Caller)
   
With Cells(4, n)
   
  If Left(按鈕名, 1) = "微" Then
        
         If Cells(1, n).Value = 1 Then <<此行 原本是想採用直接取 [微調按鈕]的值 但都失敗(我只會使用 spinebutton.value 但又沒法用.) 只好把它的值連結在 工作表上的儲存格上
   
               .Value = "你按了:" & 按鈕名 & "最大值"
               .Characters(5, 長度).Font.ColorIndex = 3
               .Characters(6 + 長度, 1).Font.ColorIndex = 3
         Else
                .Value = "你按了:" & 按鈕名 & "最小值"
                .Characters(5, 長度).Font.ColorIndex = 3
                .Characters(6 + 長度, 1).Font.ColorIndex = 8
         End If
              
   Else
   
          .Value = "你按了" & 按鈕名
         
          .Characters(3 + 長度, 1).Font.ColorIndex = 3
     
   End If
作者: mygod0403    時間: 2012-5-14 09:47

回復 2# register313
不好意思…
執行到 col.add myc 列
出現「找不到指定的物件」錯誤訊息
謝謝~~~
作者: register313    時間: 2012-5-14 10:14

回復 10# mygod0403

     找不到指定的物件
=>有沒有在表單上建立
10個TextBox: 名稱分別為TextBox1~ TextBox10   
1個Label1:   名稱為Label1

有問題請上傳excel檔案
作者: mygod0403    時間: 2012-5-14 10:41

回復 11# register313

忘了建textbox了…不好意思
運作正常,非常感謝!!

又學到了新招:victory:




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