Seh grade, dass es so nicht laufen wird. Naja, hier mal die einfache Version ohne Optimierung:
Option Explicit
Private Sub CommandButton7_Click()
Dim Arr(), xxArray, xxLenArr&()
Dim MaxXLen#
Dim I&, J&, E&
Dim a$, b$, c$, str$
Dim teilstring$
a = "AAAA" 'textbox_a.Text
b = "BBB" 'textbox_b.Text
c = "CCCCC" 'textbox_c.Text
xxArray = Split("sfds,sdfsdfsd,sdssd,sdf,sd,f,sd,f877h9,sd,f,sdr4f,sd,f,sd,f,sdfsdfsdf,sdfghjhjkkgfds,rdfgh,h,iro687,w5es,gb", ",")
MaxXLen = 60 - (Len(a & b & c) + 3)
E = UBound(xxArray)
ReDim xxLenArr(E)
For I = 0 To E
xxLenArr(I) = Len(xxArray(I))
Next
'Verteilen
AllocateSimple Arr, xxLenArr, MaxXLen
'daten auslesen
For I = 0 To UBound(Arr)
For J = 0 To UBound(Arr(I))
If teilstring = "" Then
teilstring = xxArray(Arr(I)(J))
Else
teilstring = teilstring & ", " & xxArray(Arr(I)(J))
End If
Next
str = a & " " & b & " " & teilstring & " " & c
Debug.Print str & "|" & Len(str) & "/" & 60
teilstring = vbNullString
Next
End Sub
Function AllocateSimple(Arr(), ByVal Items, Cap#) As Double
Dim a&, I&, J&, S&, E&, Spot#()
Dim Sum#, V#
'sort
E = UBound(Items)
S = LBound(Items)
'allocate items
For a = S To E
If Items(a) > 0 Then
V = CDbl(Items(a))
If Sum + V <= Cap Then
ReDim Preserve Spot(I)
Spot(I) = a
I = I + 1
Sum = Sum + V + 2
Else
ReDim Preserve Arr(J)
Arr(J) = Spot
J = J + 1
Sum = 0
I = 0
a = a - 1
End If
End If
Next
End Function
|