Nun hoffe ich Mal, dass ich das kompetenteste Forum für meine Anfrage gewählt habe.
Kleiner Satz zu mir:
Ich gehöre eher zu den Newbies im VBA-Bereich, doch die Freude ist gross. Bis jetzt konnte ich alles mit ausprobieren und googeln lösen, doch nun brauche ich spezifische Hilfe.
Folgendes Problem habe ich:
Ich versuche eine Offert-Tool zu programmieren. Soweit so gut. Nun möchte ich bei einer Multiselect Listbox mit mehreren Spalten eine Auswahl treffen, welche danach in die Offerte (Tabelle) jeweils an einen spezifischen Ort abgebildet werden. Die Spalten in der Listbox, sollen jeweils auf einer Zeile in verschiedenen nicht aufeinanderfolgenden Zellen abgebildet werden. Am liebsten wäre es mir die Zeile wird jeweils für die ausgewählte Zeile in der Listbox neu auf der Tabelle generiert.
Situtaion heute:
Die Mehrfach Auswahl wird in die Tabelle an den richtigen Ort übertragen, jedoch werden die Spalten auf der Tabelle nacheinander abgebildet. Die 5 Spalten-Werte aus der Listbox sollen in folgende Zellen C, G, I, L, N.
Des Weiteren kann ich nicht eine neue Zeile dynamisch nach dem jeweiligen Eintrag aus der Listbox generieren. Ich musste die Zelle definieren.
Momentan ist die ganze Sache eher statisch, leider bin ich noch nicht fähig die Codierung dynamischer zu machen.
Ich habe die Excel-Datei hochgeladen:
https://www.herber.de/bbs/user/112485.xlsm
Ich hoffe ich finde hier den richtigen Crack.
Lieben Dank und Grüssse
Tobias
Mein Code sieht momentan so aus:
Private Sub cmdbtplanung_Click()
ListBoxRausSelected ListBoxPlanung, _
ThisWorkbook.Worksheets("Offerte").Range("C27")
End Sub
Private Sub ListBoxRausSelected(ListBoxPlanung As MSForms.ListBox, _
StartZelle As Range)
Dim vX() As Variant, i As Long, z As Long, k As Integer
' Anzahl der selektierten Zeilen, dürfte schneller as Redim Konstrukte sein
With ListBoxPlanung
For i = 0 To .ListCount - 1
If .Selected(i) Then z = z + 1
Next i
If z = 0 Then Exit Sub ' Wenn nichts selektiert
ReDim vX(1 To z, 1 To .ColumnCount) 'Feld dimensionieren
z = 0
For i = 0 To .ListCount - 1 ' Ins Feld schreiben
If .Selected(i) Then
z = z + 1
For k = 0 To .ColumnCount - 1
vX(z, k + 1) = .List(i, k)
Next k
End If
Next i
End With ' Und jetzt raus damit
With StartZelle
Range(.Parent.Cells(StartZelle.Row, StartZelle.Column), _
.Parent.Cells(StartZelle.Row + z - 1, _
StartZelle.Column + ListBoxPlanung.ColumnCount - 1)).Value = vX
Rows("27:27").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
End With
End Sub