"Wenn Du jedoch bei z.B. 5 cbo's und zwei beliebigen angeklickten immer die caption in rahmen1 und rahmen 2 haben willst, müsste man anders vorgehen. Man könnte z.B. erst mal die captions erfassen und anschliessend auf die rahmen verteilen. Dazu könnte man z.B. ein Array verwenden oder eine Collection. Da wäre ja auch der Fall interessant, wenn Du z.B. 3 cbo's anklickst, ob die in Reihenfolge des Anklickens in die rahmen sollen oder z.B. in Reihenfolge ihrer Indizees. "
- nicht die Reihenfolge des Anklickens - sondern die Reihenfolge ihrer Indizees
ich würde das so angehen. Deine 5 Rahmen-Variablen würde ich als Array ausführen, da man darüber dann mit einer Schleife gehen kann. Falls die Bereiche noch an anderer Stelle genutzt werden, müsstest Du dort auch noch ändern. Über die Checkboxen gehe ich auch mit einer Schleife, da die schön kontinuierlich mit 100, 200 usw. benannt sind. Das Größe vom Array ergibt sich aus der Anzahl der gewählten Checkboxen. Ich erweitere das dann, dadurch werden leere Inhalte erzeugt die ich zum Überschreiben eventuell aus einer letzten Auswahl vorhandener Inhalte nutze.
Code:
'Variablendeklarationen Dim arrRahmenA(1 To 5), arrCaption Dim iCnt%, strCaption$ 'Array mit RahmenRange arrRahmenA(1) = "A6:H9" arrRahmenA(2) = "A12:H15" arrRahmenA(3) = "A18:H21" arrRahmenA(4) = "A24:H27" arrRahmenA(5) = "A28:H32" 'Schleife zum Erfassen der Captions For iCnt = 1 To 5 With Me.Controls("chkr" & iCnt & "00") If .Value = True Then strCaption = strCaption & .Caption & ";" End With Next 'Array mit Captions erzeugen arrCaption = Split(strCaption, ";") 'Array auf max. Anzahl Captions erweitern ReDim Preserve arrCaption(5) 'Schleife zum Anlegen und Entfernen der Eintraege For iCnt = 1 To 5 Range(arrRahmenA(iCnt)).Cells(2, 1).Value = arrCaption(iCnt - 1) Next
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
PrivateSub cmdOK_Click() Dim i AsLong, j AsLong Dim oControl AsObject Dim oWs As Worksheet Const lngAbstand AsLong = 6 Const lngAnzahl AsLong = 5 Const lngSpalten AsLong = 8 Const lngZeilen AsLong = 4 Const strZ1 AsString = "A6"
Set oWs = Worksheets("Rahmen")
For i = 1To lngAnzahl Set oControl = Me.Controls("chkR" & i & "00") If oControl.Value Then If j = 0Then oWs.Range(strZ1, oWs.Cells.SpecialCells(xlCellTypeLastCell)).Delete Shift:=xlShiftUp oWs.Range("H4").Value = "Checkboxen" oWs.Range("H4").HorizontalAlignment = xlRight ' richtet den Text rechts aus. EndIf With oWs.Range(strZ1).Offset(j * lngAbstand).Resize(lngZeilen, lngSpalten) .Cells(1).Value = oControl.Caption 'Rahmenlinie .BorderAround ColorIndex:=1, Weight:=xlMedium 'Rahmenfarbe .Interior.Color = RGB(255, 255, 255) EndWith j = j + 1 EndIf Next i
If j = 0Then ' wenn keine chkBox ausgewählt wird MsgBox "Bitte ein Auswahl auswählen" Else Unload Me EndIf EndSub