返回列表 上一主題 發帖

[發問] 如何利用迴圈直接改Label 的name?(已解決)

本帖最後由 icestormer 於 2012-5-6 09:33 編輯

回復 9# Hsieh


    剛才的程式完全可以使用但我有二個問題 還是不懂 想請問超版


我如果把程式改成這樣

Private Sub UserForm_Initialize()
'新增2欄8列
For j = 1 To 2
k = 0
    For i = 1 To 10
    k = k + 1
      With Controls.Add("Forms.Label.1", , True)'不改它NAME 讓它由Label1 -21
      .Caption = .Name
         .Top = 20 * (i - 1) + 5
         .Left = 160 * (j - 1) + 5
         .Width = 155
         .Height = 18
         ComboBox1.AddItem .Name
      End With
    Next
Next
End Sub

然後我另外弄一個CMD 內容是

Label1.caption ="測試" <<會失敗找不到物件
----------------------------------------------------------------------------------------------------------------------------
但如果我是先事在表單上 先拉出一個LAbel1後

這時由上頭程式碼產生的Label 1-21 >變成>Label2-21
我再按CMD 的巨集 郤是可以改變Lable1.caption

這是為什麼呢? 程式生成的Label1 為何沒法利用 Label1.caption ="測試" 來改變它呢?但事先拉在表單上的Label1.caption 郤可以?實在不懂呢
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
第二問題是.

像程式碼生成 出 Label1 -21 這部份可以利用迴圈 把它們一次都設定成visible=false? 是要利用tabindex 嗎? 還是要如何寫呢?

TOP

回復 11# icestormer
表單實際上已存在的控制項 才可用  Label1.Caption = "測試"  
With Controls.Add("Forms.Label.1", , True)  所新增的控制項 不是 表單實際上已存在的控制項
  1. Sub Ex()
  2.     Dim I As Integer
  3.     Controls("Label1").Caption = "測試"
  4.     For I = 1 To 21
  5.         Controls("Label" & I).Visible = False
  6.     Next
  7.    
  8. End Sub
複製代碼

TOP

本帖最後由 icestormer 於 2012-5-6 22:28 編輯

回復 12# GBKEE


    感謝你 經剛才試了您的程式碼 完全可以用了

不過想問另一個問題 如果 不用for next可以改用for each  X  in Label 之類的??
就是如果自訂表單上 有
TextBox 5個
Label  10個
commandbutton 6個

我可以利用for each 針對 Label  統計一共有多少個Label ?

sub commandbutton_click() <<目前只會這個而已,但他只會計算全部的控制項有多少呢.
for each  x in controls

     i=i+1
next
msgobx  "一共有多少:" & i & "控制項"

end sub
================================================================
想再問您一個問題如果我想利用雙迴圈寫出 如下的排序 要怎寫呢?怎想都想不出來..

1        2        3        4        5        6        7
8        9        10        11        12        13        14
15        16        17        18        19        20        21

TOP

回復 13# icestormer

計算物件數量,以TypeName來判斷是哪一種控制項
  1. Private Sub CommandButton3_Click()
  2. Dim Ct As Control
  3. For Each Ct In Controls
  4.   If TypeName(Ct) = "Label" Then cnt = cnt + 1
  5. Next
  6. MsgBox cnt
  7. End Sub
複製代碼
要顯示3列7欄資料,一欄列數做迴圈
  1. Sub ex()
  2. Dim ar(1 To 3, 1 To 7)
  3. For i = 1 To 3 '3列
  4.   For j = 1 To 7 '7欄
  5.      k = k + 1 '值
  6.      ar(i, j) = k '將值寫入陣列
  7.   Next
  8. Next
  9. For i = 1 To 3 '循列迴圈
  10.    m = Join(Application.Index(ar, i), ",") '取出一列
  11.    mystr = IIf(mystr = "", m, mystr & Chr(10) & m) '串聯字串
  12. Next
  13. MsgBox mystr '顯示字串
  14. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 14# Hsieh


       感謝 二位超版^^ 來去試看看
快可以有權限下載了. 到時去下載版上先進分享的VBA學習檔案 好好學習

TOP

        靜思自在 : 【為善競爭】人生要為善競爭,分秒必爭。
返回列表 上一主題