Dim Stoff(1 To 35) As Boolean
Dim i As Long
For i = LBound(Stoff) To UBound(Stoff)
Stoff(i) = UserForm2.Controls("CheckBox" & i).Value
Next
Ist kürzer. :)
ungetestet:
Option Explicit
Private Sub CommandButton1_Click()
Dim Stoff(1 To 35) As Boolean
Dim blnFetch As Boolean
Dim maxRow As Long
Dim Text As String
Dim i As Long
Dim j As Long
For i = LBound(Stoff) To UBound(Stoff)
Stoff(i) = UserForm2.Controls("CheckBox" & i).Value
Next
With Worksheets("u01_uebersicht")
maxRow = .Cells(.Rows.Count, "A").End(xlUp).Row
For i = 2 To maxRow + 1
blnFetch = False
For j = 1 To 35
If Stoff(j) And Not CBool(.Cells(i, j + 2).Value) Then
blnFetch = True
Exit For 'j
End If
Next
If UserForm2.OptionButton1.Value Then
blnFetch = blnFetch And InStr(1, .Cells(i, "AB").Text, "Modul", vbTextCompare)
ElseIf UserForm2.OptionButton2.Value Then
blnFetch = blnFetch And InStr(1, .Cells(i, "AB").Text, "Maschine", vbTextCompare)
Else 'keiner der OptionButtons wurde gesetzt
' blnFetch = False
Exit Sub
End If
If blnFetch Then
Text = Text & .Cells(i, "AL").Text & vbKeyReturn ' wohl ehern vbNewLine ?
End If
Next
End With
UserForm2.TextBox1.Text = Text
End Sub
Was du bei mit der j-Schleife bezweckst, kann ich nur vermuten. Es sieht so aus als ob du mehrere Spalten absuchst und auf eine bestimmte Konfiguration schaust. Bei jedem Treffer zählst du Count ums eins nach oben, du fängst damit aber nichts weiter an, also ist diese Information überflüssig und es genügt sich ein Wahr oder Falsch zu merken (blnFetch) und nach dem ersten Treffer dann diese Schleife zu verlassen.
Anschließend kommt der Test auf den Inhalt in Spalte AB. Das resultatat davon (enthalten / nicht enthalten) wird logisch mit der vorherigen Feststellung Und-Verknüpft, d.h. wenn beide Bedingungen nicht gleichzeitig erfüllt sind, dann ist blnFetch = False.
Anschließend wird je nachdem welchen Zustand blnFetch hat, die Information aus AL übernommen oder nicht - Wichtig: Zeichenketten werden mit dem Kaufmansund (&) verknüpft! Das Plus (+) ist ein Rechenoperator ... VBA handhabt das etwas lachs bzw. ist da sehr Einsteigerfreundlich. Man sollte das aber gleich von Anfang an voneinander trennen können und es auch konsequent voneinander trennen.
Du fügst am Ende den Chr(13) ans Ende an (das ist das Steuerzeichen für die Return-Taste. Meinem Verständnis nach ein merkwürdiges Zeichen als trennzeichen. Vielleicht meinst du ja den Zeilenumbruch? Dann ist vbNewLine dein Ding.
|