Board logo

標題: [發問] 依欄數建立選項,並有相似程式指令 [打印本頁]

作者: lyc43210    時間: 2015-6-16 18:59     標題: 依欄數建立選項,並有相似程式指令

我想依照工作表的欄數
建立同樣數量的選項按紐

每個選項選取後
都能顯示該選項的內容

目前以查到的 我只會寫增加選項
每個選項的程式碼不知怎麼寫

還請各位高手指導
謝謝
  1. Private Sub UserForm_Initialize()
  2.     i = Cells(1, 1).End(xlToRight).Column
  3.     h = 0
  4.     Dim myC As Control
  5.    
  6.     For a = 1 To i
  7.         Set myC = Controls.Add(bstrprogid:="Forms.optionButton.1")
  8.         myC.Top = h
  9.         h = h + 20
  10.         myC.Caption = Cells(1, a)
  11.     Next a
  12. End Sub

  13. '每個按鈕都是類似這樣的功能
  14. Private Sub OptionButton1_Change()
  15.     Label1.Caption = OptionButton1.Caption
  16. End Sub
複製代碼

作者: lpk187    時間: 2015-6-16 22:21

本帖最後由 lpk187 於 2015-6-16 22:23 編輯

回復 1# lyc43210


   
也不知對不對,呵呵!我也是練習
UserForm:
  1. Dim X_OB() As New Class1

  2. Private Sub UserForm_Initialize()
  3.     I = Cells(1, 1).End(xlToRight).Column
  4.     h = 0
  5.     ReDim X_OB(1 To I)
  6.     Dim myC As Control
  7.     For A = 1 To I
  8.         Set myC = Controls.Add(bstrprogid:="Forms.optionButton.1")
  9.         myC.Top = h
  10.         h = h + 20
  11.         myC.Caption = Cells(1, A)
  12.         Set X_OB(A).OB = Controls(A)
  13.     Next A
  14. End Sub
複製代碼
Class1:
  1. Public WithEvents OB As MSForms.OptionButton

  2. Private Sub OB_Click()
  3.     UserForm1.Label1 = OB.Caption
  4. End Sub
複製代碼

作者: bobomi    時間: 2015-6-16 22:55

今天想到 1個方法 不需用  Dim X_OB( ) As New Class1  ( 多一個 Class )
而是把 private  WithEvents OB_控件陣列  As MSForms.OptionButton 直接放在 UserForm  裡面
就可以實現控件陣列的方法
可以減少麻煩
有稍為 try 過, 好像可行  ......  good!!
作者: lyc43210    時間: 2015-6-17 21:51

回復 2# lpk187

謝謝

單純這樣使用可以
可是若要套用進其他程式
有時會現在可以 稍微控制像做些修改後 就又不行了
常常會在  Set X_OB(A).OB = Controls(A)     這行出現錯誤

希望高手們能繼續指導
謝謝
作者: lyc43210    時間: 2015-6-17 21:56

回復 3# bobomi
還是新手 看不懂意思
可以麻煩前輩 多解釋一點嗎
感謝
作者: lpk187    時間: 2015-6-17 22:03

回復 4# lyc43210


   你沒有告知做了什麼樣的修改後產生問題。
所以很難去做出回答!
可以的話。把修改有問題的程式碼丟上來,這樣要回答你也比較有方向
作者: lyc43210    時間: 2015-6-17 22:25

回復 6# lpk187

剛剛開個新工作表  重新測試
上面完整一模一樣的程式碼 直接放入
卻都會出現錯誤
不過之前都是可以的

[attach]21194[/attach]
作者: lpk187    時間: 2015-6-17 22:26

本帖最後由 lpk187 於 2015-6-17 22:30 編輯

回復 4# lyc43210


  假設你是有其他控制項的話
  Set X_OB(A).OB = Controls(A)
這裡的變數A可以把它改成 Set myC = Controls.Add...新增控項的名稱
如下:
Set X_OB(A).OB = Controls(myC.Name)

原本的變數A是指到它的Controls序號位置,改名稱是會指向新增Controls控項的名稱
作者: lpk187    時間: 2015-6-17 22:38

回復 7# lyc43210

[attach]21195[/attach]
作者: lyc43210    時間: 2015-6-17 23:08

回復 8# lpk187

那樣修改後,又可以正常執行了
但加入我的程式後又不行了
然後又出現不同的錯誤

[attach]21196[/attach]
  1. Private Sub UserForm_Initialize()
  2.     i = Sheets(1).Cells(1, 1).End(xlToRight).Column
  3.     h = 336
  4.    
  5.     If i > 14 Then
  6.         ReDim X_OB(15 To i)
  7.         Dim myC As Control
  8.         For a = 1 To i - 14
  9.             Set myC = Controls.Add(bstrprogid:="Forms.optionButton.1")
  10.             With myC
  11.                 .Caption = "        " & Sheets(1).Cells(1, a + 14).Value
  12.                 .font.Name = "微軟正黑體"
  13.                 .font.Size = 12
  14.                 .font.Bold = True
  15.                 .ForeColor = &HFFFFFF
  16.                 .BackColor = &HFFE66F
  17.                 .Height = 21.75
  18.                 .Width = 144.75
  19.                 .Left = -12
  20.                 h = h + 24
  21.                 .Top = h
  22.                 Sheets(2).ScrollHeight = h + 24
  23.                
  24.             End With
  25.             Set X_OB(a).OB = Controls(myC.Name)
  26.         Next a
  27.     End If
  28. End Sub
複製代碼

作者: lpk187    時間: 2015-6-17 23:25

回復 10# lyc43210

上傳你的檔案上來吧!
作者: lpk187    時間: 2015-6-18 01:00

本帖最後由 lpk187 於 2015-6-18 01:05 編輯

回復 10# lyc43210

嗯!找出來的原因在Set X_OB(a ).OB = Controls(myC.Name)
原來的ReDim X_OB(15 To i)
陣列是從15開始
但For a = 1 To i - 14
這裡的 A變數則是從1開始和X_OB陣列的編號不同造成的錯誤所以要改成下列:
Set X_OB(a + 14).OB = Controls(myC.Name)
作者: lyc43210    時間: 2015-6-18 12:33

回復 12# lpk187

成功解決了!
原來是這地方的問題
謝謝你




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