2016-05-04 10 views
0

Iam meine Etiketten und Checkbox von Code erstellen:VBA Excel Schleife auf 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 

ich für aktive Kontrollkästchen von Code suchen:

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 

Aber in ‚* Ort bekam ich Problem kann nicht label.caption wenn iam mit UserForm1.Controls (j) .Caption seine Schleife durch alle Teile Teile von user.form nicht nur Etiketten.

+0

Ich denke, es ist keine gute Idee, einen einfachen numerischen Wert (zB: labelCounter) als Name für Ihre Etiketten zu geben. Vielleicht erstellen Sie einen Namen wie für Checkboxen: 'UserForm1.Controls.Add (" Forms.Label.1 "," label_ "& labelCounter, True)'. –

Antwort

0

Angenommen, Ihre Kontrollen sind paarweise, sollte es sein:

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

obwohl ich denke, Sie sollten die Etiketten auf die gleiche Weise benennen Sie die Kontrollkästchen hat.

+0

Ist '" "& j' besser als 'CStr (j)'? –

+0

@Rory: Entschuldigung, ich habe meine Antwort bearbeitet, während du deine schon gepostet hast. und solange die Frage des OPs betroffen ist, haben sie die gleiche Lösung (wenn auch in verschiedenen "Geschmacksrichtungen") -> Credits für Sie! – user3598756

+0

@VincentG Nein, nicht besser oder schlechter. – Rory

1

Sie verwenden

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

hier einige andere mögliche Erweiterungen des Codes

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 

hier folgt folgt schließlich über denselben Code, sondern mit der Ausbeutung von Steueranordnungen, die möglicherweise den Code machen kann besser lesbar und wartbar:

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

Großartig es funktioniert.

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

Ty Benutzer3598756.

Verwandte Themen