Board logo

標題: [發問] 如何利用迴圈直接改Label 的name?(已解決) [打印本頁]

作者: icestormer    時間: 2012-5-3 22:16     標題: 如何利用迴圈直接改Label 的name?(已解決)

本帖最後由 icestormer 於 2012-5-7 08:41 編輯

我有大約53個label16 -label53 我想利用迴圈 直接把name 改成 label16>>LB1 一宜到LB53


但我發現改不呢, 改它的caption 倒可以 不知要怎寫呢?
Sub 改名()

  For i = 1 To 53
   
         我的表單.Controls("Label" & i + 15).Name

  Next
  
  End Sub
作者: play9091    時間: 2012-5-3 23:01

小弟功力尚淺…
看沒有很懂你想要表達什麼,有沒有附件呢?
有付件幫您做比較快……
作者: Hsieh    時間: 2012-5-3 23:03

回復 1# icestormer
必須是由程式動態新增物件才能夠在表單初始化時做新增同時命名
已經使用手動布置的物件,在表單啟動後則無法重新命名
作者: icestormer    時間: 2012-5-4 10:41

回復 3# Hsieh


   那我了解 感謝 超版
作者: icestormer    時間: 2012-5-4 10:54

本帖最後由 icestormer 於 2012-5-4 11:36 編輯

可以請教一下  如何寫動態建立Label 在表單上呢 ,?可以同時設定 多長 多高 及位置嗎?
作者: Hsieh    時間: 2012-5-4 14:20

回復 5# icestormer
  1. Private Sub UserForm_Initialize()
  2. '新增2欄8列
  3. For j = 1 To 2
  4.     For i = 1 To 8
  5.       With Controls.Add("Forms.Label.1", "LA" & i & "_" & j, True)
  6.       .Caption = .Name
  7.          .Top = 20 * (i - 1) + 5
  8.          .Left = 160 * (j - 1) + 5
  9.          .Width = 155
  10.          .Height = 18
  11.       End With
  12.     Next
  13. Next
  14. End Sub
複製代碼

作者: icestormer    時間: 2012-5-4 14:37

回復 6# Hsieh


   謝 超版 來去試看看^^
作者: icestormer    時間: 2012-5-5 21:07

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

[attach]10819[/attach]回復 6# Hsieh



請問超版  我用下列程式碼在自訂表單上 生出這些label  那要怎在另一個按鍵 (改變)中 改變LA0的CAPTION呢? 都一直說 找不到物件

另外 如果想刪除透過程式碼生成的控制項(像是Label)又要怎寫呢??
    Private Sub CommandButton2_Click()
For j = 0 To 32
              For i = 0 To 6           
                With Controls.Add("Forms.Label.1", "LA" & j + i, True)'請問這行中的 TRUE 是不是指 要顯示的意思?
                   .Caption = .Name
                   .Font.Size = 12
                   .BorderStyle = 1
                   .ForeColor = &H80000012
                   .Top = 42 + (j * 14)
                   .Left = i * 70
                   .Width = 70
                   .Height = 16
                   .TextAlign = 3
             end with
    next  i
next j
=======================================================
另外不知要怎寫迴圈能表現出下方這種情況呢?

試了好久但都試不出來 像下方的程式碼怎要怎寫. 用雙迴圈 也寫不出來

1的10
2的9
3的8
4的7
5的6
6的5
7的4
8的3
9的2
10的1
作者: Hsieh    時間: 2012-5-6 00:16

回復 8# icestormer
表單物件只能用隱藏不能刪除
  1. Private Sub CommandButton1_Click()
  2. If ComboBox1 = "" Then Exit Sub
  3. Me.Controls(ComboBox1.Text).Visible = False  '.Caption = "ar"
  4. ComboBox1.RemoveItem ComboBox1.ListIndex
  5. ComboBox1 = ""
  6. End Sub

  7. Private Sub CommandButton2_Click()
  8. Me.Controls(ComboBox1.Text).Caption = TextBox1
  9. End Sub

  10. Private Sub UserForm_Initialize()
  11. '新增2欄8列
  12. For j = 1 To 2
  13. k = 0
  14.     For i = 1 To 10
  15.     k = k + 1
  16.       With Controls.Add("Forms.Label.1", "LA" & k & "_" & 10 - k + 1 & "_" & j, True)
  17.       .Caption = .Name
  18.          .Top = 20 * (i - 1) + 5
  19.          .Left = 160 * (j - 1) + 5
  20.          .Width = 155
  21.          .Height = 18
  22.          ComboBox1.AddItem .Name
  23.       End With
  24.     Next
  25. Next
  26. End Sub
複製代碼
[attach]10821[/attach]
[attach]10822[/attach]
作者: icestormer    時間: 2012-5-6 08:35

回復 9# Hsieh


   謝 超版  來去試看看
作者: icestormer    時間: 2012-5-6 09:27

本帖最後由 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 嗎? 還是要如何寫呢?
作者: GBKEE    時間: 2012-5-6 17:52

回復 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
複製代碼

作者: icestormer    時間: 2012-5-6 20:50

本帖最後由 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
作者: Hsieh    時間: 2012-5-6 23:38

回復 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
複製代碼

作者: icestormer    時間: 2012-5-7 08:19

回復 14# Hsieh


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




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