AW: Verschachtelte Schleifen
15.03.2021 12:47:17
Steff
Hallo Piet,
hallo Yal,
wahrscheinlich hat mich dieses ganze "Schleifen ineinander" laufen lassen, etwas aus der Spur geworfen, aber! ich habe dank eurer Ansätze eine Lösung gefunden und diese funktioniert sehr erfolgreich. Leider konnte ich euch nicht alle Inhalte der zu lösenden Aufgabe geben (Firma) und meine Abstraktion war nicht immer präzise genug. Dennoch gilt: Lösung ist da. Da ich diese Schleifen mehrfach mit mehreren Selektionen prüfen muss, habe ich nun von Außen nach Innen gearbeitet. Erst die 3te Selektion in ein Array schreiben, dann die 2te Selektion und im letzten Schritt sage ich "für die restlichen Werte, die nicht in der Selektion vorkommen, nimm bitte eine bestimmte Range für das Worddokument". Außerdem bilde ich noch ein Gesamtarray, um hier Überschneidungen zu vermeiden.
Zur Beantwortung der Frage Array = 1,2,3 - das benötige ich für frei wählbare Variablen, die im Worddokument mit 1 2 und 3 hinter einem Namen laufen. Hier erstmal nachrangig.
Sub ...()
Dim VarDat As Variant
Dim varFeld As Variant
Dim VarDatWKZ As Variant
Dim VarFeldWKZ As Variant
Dim VarDatWKZAlle As Variant
Dim VarFeldWKZAlle As Variant
Dim Test As String, strSelAll, varSel, strSel2, varSel2, varSelAll, strSel
Dim intSel As Integer
VarDatWKZ = Tabelle11.Range("rngWKZ")
'Wenn 3te Selektion Wahr, dann
If Range("UE_weitSB").Value = True Then
With Tabelle1.lbweitSB
For ii = 0 To .ListCount - 1
If .Selected(ii) Then
strSel = strSel & "|" & .List(ii)
strSelAll = strSelAll & "|" & .List(ii)
End If
Next ii
End With
varSel = Split(Mid(strSel, 2), "|") 'Array mit Auswahl
For Each strSel In varSel
wdDoc.Bookmarks("TM_VKSB" & strSel).Range.InsertAfter Range("UE_VK_SB3").Value
wdDoc.Bookmarks("TM_TKSB" & strSel).Range.InsertAfter Range("UE_TK_SB3").Value
If Range("UE_ALTNDECKUNG3_JN").Value = True Then
wdDoc.Bookmarks("TM_TKSB" & strSel & "Einzel").Range.InsertAfter Range(" _
UE_TK_SB3_ALTERNATIV").Value
Else
wdDoc.Bookmarks("TM_TKSB" & strSel & "Einzel").Range.InsertAfter Range("UE_TK_SB3"). _
Value
End If
Next strSel
End If
'Wenn 2te Wahr, dann
If Range("UE_zusSB").Value = True Then
With Tabelle1.lbzusSB
For ii = 0 To .ListCount - 1
If .Selected(ii) Then
strSel2 = strSel2 & "|" & .List(ii)
strSelAll = strSelAll & "|" & .List(ii)
End If
Next ii
End With
varSel2 = Split(Mid(strSel2, 2), "|") 'Array mit Auswahl
For Each strSel2 In varSel2
wdDoc.Bookmarks("TM_VKSB" & strSel2).Range.InsertAfter Range("UE_VK_SB2").Value
wdDoc.Bookmarks("TM_TKSB" & strSel2).Range.InsertAfter Range("UE_TK_SB2").Value
If Range("UE_ALTNDECKUNG3_JN").Value = True Then
wdDoc.Bookmarks("TM_TKSB" & strSel2 & "Einzel").Range.InsertAfter Range(" _
UE_TK_SB2_ALTERNATIV").Value
Else
wdDoc.Bookmarks("TM_TKSB" & strSel2 & "Einzel").Range.InsertAfter Range("UE_TK_SB2"). _
Value
End If
Next strSel2
End If
'Gesamtes Array bilden für Schnittmenge
varSelAll = Split(Mid(strSelAll, 2), "|")
'Restliche Werte verarbeiten
If Range("UE_alleRisiken").Value = True Then
VarDatWKZAlle = Tabelle11.Range("rngWKZ")
For Each VarFeldWKZAlle In VarDatWKZAlle
wdDoc.Bookmarks("TM_VKSB" & VarFeldWKZAlle).Range.InsertAfter Range("UE_VK_SB1"). _
Value
wdDoc.Bookmarks("TM_TKSB" & VarFeldWKZAlle).Range.InsertAfter Range("UE_TK_SB1"). _
Value
If Range("UE_ALTNDECKUNG1_JN").Value = True Then
wdDoc.Bookmarks("TM_TKSB" & VarFeldWKZAlle & "Einzel").Range. _
InsertAfter Range("UE_TK_SB1_ALTERNATIV").Value
Else
wdDoc.Bookmarks("TM_TKSB" & VarFeldWKZAlle & "Einzel").Range. _
InsertAfter Range("UE_TK_SB1").Value
End If
Next VarFeldWKZAlle
Else
For Each VarFeldWKZ In VarDatWKZ
For intSel = 0 To UBound(varSelAll)
If IsError(Application.Match(CStr(VarFeldWKZ), varSelAll, 0)) Then
wdDoc.Bookmarks("TM_VKSB" & VarFeldWKZ).Range.InsertAfter Range("UE_VK_SB1"). _
Value
wdDoc.Bookmarks("TM_TKSB" & VarFeldWKZ).Range.InsertAfter Range("UE_TK_SB1"). _
Value
If Range("UE_ALTNDECKUNG1_JN").Value = True Then
wdDoc.Bookmarks("TM_TKSB" & VarFeldWKZ & "Einzel").Range.InsertAfter _
Range("UE_TK_SB1_ALTERNATIV").Value
Else
wdDoc.Bookmarks("TM_TKSB" & VarFeldWKZ & "Einzel").Range.InsertAfter _
Range("UE_TK_SB1").Value
End If
Exit For
Else: End If
Next intSel
Next VarFeldWKZ
End If
End Sub