Board logo

標題: 表單控制項無法自動刪除 [打印本頁]

作者: reangame    時間: 2014-6-13 23:18     標題: 表單控制項無法自動刪除

首先感謝GBKEE大大之前的指導,
檔案為更改GBKEE大大程式碼所產生的,不過遇到一個小問題,
就是程式一直無法自動刪除控制項,
一直出現下圖:
[attach]18502[/attach]
也爬了很多文章,但就是試不出來,
  1.     Dim sp As Control
  2.     For Each sp In UserForm1.Frame2.Controls
  3.        If sp.Name Like "ToggleButton*" Then sp.Delete
  4.     Next
複製代碼
錯誤一直出現在 sp.Delete 這裡,實在找不到方法了,
因此,請各位大大幫忙指導一下,感謝!
作者: GBKEE    時間: 2014-6-14 05:33

回復 1# reangame
  1. If sp.Name Like "ToggleButton*" Then Controls.Remove (sp.Name)
複製代碼
可參考這裡
作者: reangame    時間: 2014-6-14 14:49

回復 2# GBKEE

GBKEE大大,您好:
程式碼改成:If sp.Name Like "ToggleButton*" Then Controls.Remove (sp.Name),確實可執行刪除,
再請教一個問題,要如何讓自動產生ToggleButton按鈕點擊時,讓按下去的ToggleButton按鈕字體變成粗體字或是改變背景顏色?
跟這個相關的觀念應該是控件自動加入程式碼,我試過下面的方法
  1.     da = Val(Day(day2))
  2.     For i = 1 To da
  3.         With UserForm1.Frame2.CodeModule
  4.             X = .CountOfLines
  5.             .InsertLines X + 1, "Private Sub ToggleButton" & i & "_Click()"
  6.             .InsertLines X + 2, "  msgbox ToggleButton & i "
  7.             .InsertLines X + 3, "End Sub"
  8.         End With
  9.     Next i
複製代碼
可是卻沒辦法執行,這個觀念一直搞不懂,還請大大指導一下,感恩~
作者: GBKEE    時間: 2014-6-14 16:42

回復 3# reangame
  1. Dim XToggle() As New Class1
  2. Private Sub ComboBox1_Change()
  3. If ComboBox1 <> "" And ComboBox2 <> "" Then 行事曆製作
  4. End Sub
  5. Private Sub ComboBox2_Change()
  6. If ComboBox1 <> "" And ComboBox2 <> "" Then 行事曆製作
  7. End Sub
  8. Sub 行事曆製作()
  9.     Dim sp As Control
  10.     For Each sp In UserForm1.Frame2.Controls
  11.        If sp.Name Like "ToggleButton*" Then Me.Controls.Remove sp.Name
  12.     Next
  13.     day1 = DateSerial(Val(ComboBox1), Val(ComboBox2), 1)
  14.     day2 = DateSerial(Val(ComboBox1), Val(ComboBox2) + 1, 0)
  15.     w = Weekday(day1, vbMonday)
  16.     ReDim XToggle(day1 To day2)
  17.     For I = day1 To day2
  18.         k = Int((Day(I) + w - 2) / 7)
  19.         s = Weekday(I, vbMonday)
  20.         kk = Int((Day(I) + w - 2) / 7)
  21.         If kk = 5 Then
  22.             Frame1.Height = 262
  23.         Else
  24.             Frame1.Height = 222
  25.         End If
  26.         
  27.          With Frame2.Controls.Add("forms.ToggleButton.1")
  28.             .Top = (k * 38) - 1
  29.             .Left = (42 * (s - 1)) - 2
  30.             .Height = 38
  31.             .Width = 42
  32.             .Caption = Day(I)
  33.             Set XToggle(I).Toggle = Controls(.Name)
  34.             '物件變數指定為 Controls(.Name)
  35.         End With
  36.     Next
  37. End Sub
複製代碼
[attach]18503[/attach]
  1. Option Explicit
  2. Public WithEvents Toggle As MSForms.ToggleButton
  3. Private Sub Toggle_Click()
  4.     With Toggle
  5.         .BackStyle = 1
  6.         If .Value Then
  7.             .Font.Size = 18
  8.             .Font.Bold = True
  9.             .BackColor = vbYellow
  10.         Else
  11.             .Font.Size = 12
  12.             .Font.Bold = False
  13.             .BackColor = &H8000000F
  14.         End If
  15.     End With
  16. End Sub
複製代碼

作者: reangame    時間: 2014-6-14 18:16

回復 4# GBKEE
GBKEE大大,您好:
您所製作的程式碼確實可以執行,不知小弟以下註解是否正確:
Dim XToggle() As New Class1    ->定義XToggle()為物件類別模組,使用時機??
ReDim XToggle(day1 To day2)  ->重新定義XToggle陣列,數量為day1 To day2,但為什麼需要定義這個陣列? 再者陣列不是從0開始,XToggle(i)怎麼不會出錯?
Set XToggle(I).Toggle = Controls(.Name)     ->設定XToggle(I)控制項的名稱?  .Toggle是什麼功用?(以MsgBox XToggle(i).Toggle檢視均為false,F1也查不到)
Public WithEvents Toggle As MSForms.ToggleButton    ->公告Toggle是表單中的ToggleButton按鈕
如何分辨Shapes、OLEObjects、Controls的差別或使用時機??
參研後的感想....
只能說VB程式碼的世界真像宇宙般浩瀚無垠,
這些程式碼不知道您是如何構思出來的,如何才能有這樣撰寫的想法及能力...
真的很想成為像您一樣的高手,然後再幫助別人成長,
總之,真的很佩服您!
作者: GBKEE    時間: 2014-6-15 14:40

本帖最後由 GBKEE 於 2014-6-15 19:11 編輯

回復 5# reangame
Dim XToggle() As New Class1    ->定義XToggle()為物件類別模組,使用時機??
當你有許多相同物件的預設事件,不需每ㄧ物件寫一事件程式碼.

再者陣列不是從0開始,XToggle(i)怎麼不會出錯?
  1. Option Explicit
  2. Sub Ex()
  3.     Dim ar(-5 To 5)
  4.     ar(-5) = "Why"
  5.     MsgBox ar(-5)
  6. End Sub
複製代碼
在表單中 的 Dim XToggle() As New Class1 -> 宣告 XToggle() 型態為 新的 Class1
4# 的物件模組名稱為 Class1為預設的.新增依序會為 Class2,Class3....,亦可依喜好命名,
Dim XToggle() As New GbKee


Set XToggle(I).Toggle = Controls(.Name)     ->設定XToggle(I)控制項的名稱?  
.Toggle是什麼功用?->Public WithEvents Toggle As MSForms.ToggleButton   是這控制項   

F1也查不到
vba視窗中輸入ToggleButton 可查到

如何分辨Shapes、OLEObjects、Controls的差別或使用時機??
vba視窗中輸入Shapes ....可了解
作者: reangame    時間: 2014-6-18 14:06

回復 6# GBKEE

又上了一課,感謝GBKEE大大!




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