Hallo Florian,
Du wolltest, dass die Summe der Tonnen und der Fläche in EINER Zeile erscheint. Das macht mein Makro mit Umweg über eine Textbox im Formularkopf, aus Gründen der Übersichtlichkeit. Diese Textbox kann bei Klick auf Übernehmen in das Sheet eingetragen werden. Den Code dafür bekommst du selbst hin. Darüberhinaus bietet der Code die Artikelzeilen als Datenarray an, sodass eine weitere Bearbeitung recht einfach ist. Wenn du nun (wie in deiner Ausgangsfrage beschrieben) beim Neuöffnen des Formulars, wieder die einzelenen Artikel sehen willst, benötigst du mindestens noch eine Spalte für die einzelnen Gewichte. Ich nutze hierfür mal Spalte V, die Bezeichnungen in O und die Maße in J:
In Klasse 1 solltest du oben die neue Variable
Public WithEvents Info1 As MSForms.TextBox definieren und folgende Sub hinzufügen:
Private Sub Info1_Change()
Dim bez As String
For z = 1 To zeilen
bez = bez + Info1.Parent.Controls("Textbox" & Trim(Str(6000 + z))).Value & IIf(Info1.Parent.Controls("Textbox" & Trim(Str(6000 + z))).Value <> "", " / ", "")
Next z
Info1.Parent.Controls("Textbox5010").Value = Left(bez, Len(bez) - 3)
End Sub
Außerdem solltest du
unbedingt in
Sub TBKeyPress als erste Zeile das hier einzufügen:
If Info1.Value = "" Then MsgBox "Geben Sie zuerst eine Bezeichnung ein", vbInformation, ActiveWorkbook.Name
Damit kannst du verhindern, dass Maßangaben gespeichert werden, für die keine Bezeichnung existiert, da sonst das Programm beim Neuöffnen die Daten durcheinander würfeln würde.
In Userform3 wird am Ende von CommandButton1_Click (aber natürlich vor Unload me) das hier eingefügt:
For ze = 1 To zeilen
If Artikel(ze).Info1 <> "" Then LBH = LBH & Artikel(ze).Länge & " x " & Artikel(ze).Breite & " x " & Artikel(ze).Höhe & " / "
If Artikel(ze).Info1 <> "" Then Tn = Tn & Artikel(ze).Tons & " / "
Next ze
Cells(z, 10) = Left(LBH, Len(LBH) - 3)
Cells(z, 22) = Left(Tn, Len(Tn) - 3)
Zu guter Letzt
ersetzt du im
Initialize-Ereignis die
For-To-Next-Schleife durch diesen Code:
InputTons = Split(Cells(ActiveCell.Row, 22), " / ")
InputLBH = Split(Cells(ActiveCell.Row, 10), " / ")
InputBez = Split(Cells(ActiveCell.Row, 15), " / ")
For z = 1 To zeilen
Set Artikel(z).Tons = Controls("Textbox" & Trim(Str(7000 + z)))
Set Artikel(z).Länge = Controls("Textbox" & Trim(Str(z)) & "01")
Set Artikel(z).Breite = Controls("Textbox" & Trim(Str(z)) & "02")
Set Artikel(z).Höhe = Controls("Textbox" & Trim(Str(z)) & "03")
Set Artikel(z).Info1 = Controls("Textbox" & Trim(Str(6000 + z)))
If z <= UBound(InputTons) + 1 Then Artikel(z).Tons = InputTons(z - 1)
If z <= UBound(InputLBH) + 1 Then
PartLBH = Split(InputLBH(z - 1), " x ")
Artikel(z).Länge = PartLBH(0)
Artikel(z).Breite = PartLBH(1)
Artikel(z).Höhe = PartLBH(2)
End If
If z <= UBound(InputBez) + 1 Then Artikel(z).Info1.Value = InputBez(z - 1)
Next z
Ich denke mit diesen Infos bekommst du den Rest selbst hin. Du hast ja bereits gut vorgearbeitet.
L.G. Mr. K.