標題:
[發問]
依欄數建立選項,並有相似程式指令
[打印本頁]
作者:
lyc43210
時間:
2015-6-16 18:59
標題:
依欄數建立選項,並有相似程式指令
我想依照工作表的欄數
建立同樣數量的選項按紐
每個選項選取後
都能顯示該選項的內容
目前以查到的 我只會寫增加選項
每個選項的程式碼不知怎麼寫
還請各位高手指導
謝謝
Private Sub UserForm_Initialize()
i = Cells(1, 1).End(xlToRight).Column
h = 0
Dim myC As Control
For a = 1 To i
Set myC = Controls.Add(bstrprogid:="Forms.optionButton.1")
myC.Top = h
h = h + 20
myC.Caption = Cells(1, a)
Next a
End Sub
'每個按鈕都是類似這樣的功能
Private Sub OptionButton1_Change()
Label1.Caption = OptionButton1.Caption
End Sub
複製代碼
作者:
lpk187
時間:
2015-6-16 22:21
本帖最後由 lpk187 於 2015-6-16 22:23 編輯
回復
1#
lyc43210
也不知對不對,呵呵!我也是練習
UserForm:
Dim X_OB() As New Class1
Private Sub UserForm_Initialize()
I = Cells(1, 1).End(xlToRight).Column
h = 0
ReDim X_OB(1 To I)
Dim myC As Control
For A = 1 To I
Set myC = Controls.Add(bstrprogid:="Forms.optionButton.1")
myC.Top = h
h = h + 20
myC.Caption = Cells(1, A)
Set X_OB(A).OB = Controls(A)
Next A
End Sub
複製代碼
Class1:
Public WithEvents OB As MSForms.OptionButton
Private Sub OB_Click()
UserForm1.Label1 = OB.Caption
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]
Private Sub UserForm_Initialize()
i = Sheets(1).Cells(1, 1).End(xlToRight).Column
h = 336
If i > 14 Then
ReDim X_OB(15 To i)
Dim myC As Control
For a = 1 To i - 14
Set myC = Controls.Add(bstrprogid:="Forms.optionButton.1")
With myC
.Caption = " " & Sheets(1).Cells(1, a + 14).Value
.font.Name = "微軟正黑體"
.font.Size = 12
.font.Bold = True
.ForeColor = &HFFFFFF
.BackColor = &HFFE66F
.Height = 21.75
.Width = 144.75
.Left = -12
h = h + 24
.Top = h
Sheets(2).ScrollHeight = h + 24
End With
Set X_OB(a).OB = Controls(myC.Name)
Next a
End If
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/)