2016-05-04 2 views
0

Iam создавая свои метки и флажки по коду:петля VBA Excel на userform.label

i = 1 
While Not Sheets("I_M_1_1PW").Cells(9 + i, 43) = "koniec" 

    Set theLabel = UserForm1.Controls.Add("Forms.Label.1", labelCounter, True) 
    With theLabel 
     .Caption = Sheets("I_M_1_1PW").Cells(9 + i, 43) 
     .Left = 10 
     .Width = 100 
     .Top = 13 * labelCounter 
     Debug.Print labelCounter & " " & theLabel.Caption 
    End With 

Set chkbox = UserForm1.Controls.Add("Forms.CheckBox.1", "CheckBox_" & i) 
    chkbox.Caption = Sheets("I_M_1_1PW").Cells(9 + i, 44) 
    chkbox.Left = 100 
    chkbox.Width = 75 
    chkbox.Top = 13 * labelCounter 
i = i + 1 
labelCounter = labelCounter + 1 

Я могу найти активного флажком по коду:

For j = 1 To Granica - 1 

      If UserForm1.Controls("CheckBox_" & j).Value = True Then 

      Wynik1 = UserForm1.Controls("CheckBox_" & j).Caption + Wynik1 
    '*   Wzorce = Wzorce + UserForm1.label(j).Caption 

      End If 
Next 

Но в «* место я получил проблема, не могу взять label.caption, когда iam с помощью UserForm1.Controls (j). Запишите его цикл через все части частей user.form и не только метки.

+0

Я думаю, что это не очень хорошая идея дать простое числовое значение (то есть: labelCounter) в качестве имени ваших ярлыков. Возможно, создайте имя, которое вы делаете для флажков: 'UserForm1.Controls.Add (« Forms.Label.1 »,« label_ »и labelCounter, True)'. –

ответ

0

Если предположить, что элементы управления парами, должно быть:

Wzorce = Wzorce + UserForm1.Controls("" & j).Caption 

хотя я думаю, что вы должны назвать лейбл так же, как вы делали флажки.

+0

Является '' "& j' лучше, чем' CStr (j) '? –

+0

@Rory: Извините, я редактировал свой ответ, пока вы уже разместили свой. и, как долго вопрос о OP, они дали то же решение (хотя и в разных «ароматах») -> кредиты вам! – user3598756

+0

@VincentG Нет, не лучше или хуже. – Rory

1

вы должны использовать

Wzorce = Wzorce + UserForm1.Controls(CStr(j)).Caption 

здесь следует некоторые другие возможные улучшения вашего кода

Dim theLabel As MSForms.Label, chkbox As MSForms.CheckBox 
Dim Wynik1 As Variant, Wzorce As Variant 

i = 1 
While Not Sheets("I_M_1_1PW").Cells(9 + i, 43) = "koniec" 

    Set theLabel = UserForm1.Controls.Add("Forms.Label.1", i, True) 
    With theLabel 
     .Caption = Sheets("I_M_1_1PW").Cells(9 + i, 43) 
     .Left = 10 
     .Width = 100 
     .Top = 13 * i 
     Debug.Print i & " " & theLabel.Caption 
    End With 

    Set chkbox = UserForm1.Controls.Add("Forms.CheckBox.1", "CheckBox_" & i) 
    With chkbox 
     .Caption = Sheets("I_M_1_1PW").Cells(9 + i, 44) 
     .Left = 100 
     .Width = 75 
     .Top = 13 * i 
    End With 

    i = i + 1 
Wend 

... 

For j = 1 To Granica - 1  

    If UserForm1.Controls("CheckBox_" & j).Value = True Then 
     Wynik1 = chkboxes(j).Caption + Wynik1 
     Wzorce = Wzorce + UserForm1.Controls(j).Caption  
    End If 
Next 

Наконец отсюда следует такой же код, приведенный выше, но с эксплуатацией управления массивами, которые могут возможно сделать свой код более читабельны и обслуживаемы:

Dim theLabel As MSForms.Label, chkbox As MSForms.CheckBox 
Dim labels() As MSForms.Label, chkboxes() As MSForms.CheckBox 

i = 1 
While Not Sheets("I_M_1_1PW").Cells(9 + i, 43) = "koniec" 

    Set theLabel = UserForm1.Controls.Add("Forms.Label.1", i, True) 
    With theLabel 
     .Caption = Sheets("I_M_1_1PW").Cells(9 + i, 43) 
     .Left = 10 
     .Width = 100 
     .Top = 13 * i 
     Debug.Print i & " " & theLabel.Caption 
    End With 
    ReDim Preserve labels(1 To i) 
    Set labels(i) = theLabel 

    Set chkbox = UserForm1.Controls.Add("Forms.CheckBox.1", "CheckBox_" & i) 
    With chkbox 
     .Caption = Sheets("I_M_1_1PW").Cells(9 + i, 44) 
     .Left = 100 
     .Width = 75 
     .Top = 13 * i 
    End With 
    ReDim Preserve chkboxes(1 To i) 
    Set chkboxes(i) = chkbox 

    i = i + 1 
Wend 

... 

For j = 1 To Granica - 1 
    If chkboxes(j).Value = True Then 
     Wynik1 = chkboxes(j).Caption + Wynik1 
     Wzorce = Wzorce + labels(j).Caption 
    End If 
Next 

End Sub 
0

Отлично работает.

Wzorce = Wzorce + UserForm1.Controls("label_" & j).Caption 

Ty пользователь3598756.

Смежные вопросы