Clever-Excel-Forum

Normale Version: Listboxinhalt kopieren und zurück
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Guten Morgen Zusammen, 

neue Ideen, neue Probleme. 
Nach vielen erfolgreichen Umsetzungen Listboxen zu kombinieren, Inhalte zunummerieren etc.,  
   a) nun möchte ich "einfach" den Inhalt einer Listbox komplett in eine andere Listbox (auf einer anderen Page einer Multipage) übertragen. 
   Habe viele gefundene Ansätze aus dem umfangreichen Intranet versucht umzusetzen, bisher erfolglos. 
   Eine Beispieldatei habe ich angehängt. 
   Der Problemfall ist in der Datei unter "Auswahluebertragen2" zu finden.

     b) danach würde ich gerne wissen, ob ich den Inhalt aus einer Listbox (zweispaltig) in EINE Tabellenzelle schreiben kann und anschließend wieder als Listbox darstellen kann. Hintergrund, das Formular ist mittlerweile so umfangreich, dass es Sinn macht, es (in einer Tabelle) zwischenzuspeichern oder wieder neu aufzurufen zu können. Mit den ganzen Textfeldern, Checkboxen, Optionsfeldern klappt es wunderbar, nur bei den Listboxen, fehlt mir noch ein Ansatz. Sollte durch ein eingefügtes Trennungszeichen (z.B. ;) doch irgendwie möglich sein, oder? 

Wer hat da Erfahrung? 
Vielen Dank im Voraus

soldblub
Hallöchen,


a) im Prinzip ListBox2.List() = ListBox1.List()

b) wenn es temporär ist warum dann in eine Zelle? So viel platz wie auf einem Blatt ist bekommst Du sicher nicht in eine Listbox ... Und unnötiger Programmieraufwand ...
Erstmal vielen Dank, für Lösung a)  

Hintergrund, ist das mehrere Nutzer das Formular nutzen, und die fast 100 Punkte (Textfelder, Checkboxen, etc. und 8 Seiten A4) nicht immer in einem Ausfüllen können. Wenn sich dann Fehler eingeschlichen haben, wäre es super, das alte Formular nur aufzurufen, Fehler oder Änderungen beheben bzw. durchführen zu können. Theoretisch wie eine kleine Datenbank, wobei ich die gemachten Eintgaben immer in die letzte freie Zeile eines Arbeitsblattes schreibe und in A1 einen selbst generierten PIN hinzufügt habe, mit der sich das Formular wieder aufrufen lässt. 

Wie gesagt, nun muss ich noch die ausgewählten Einträge einer Listbox die ich z.B. hierdurch 

Dim ZeileMax As Long
Dim Zeile As Long
Dim i As Long
Dim txt As String

'Ermittlung der letzten verwendeten Zeile
    ZeileMax = .UsedRange.Rows.Count
    Zeile = ZeileMax + 1

For i = 0 To List_RG.ListCount - 1
    If List_RG.Selected(i) Then txt = txt & "; " & vbCrLf & List_RG.List(i) 
Next
Tabelle10.Range("B" & Zeile).Value = Mid(txt, 2)




in eine Zelle schreibe, wieder in eine Listbox einfügen???
Hallöchen,

nochmal:
b) wenn es temporär ist warum dann in eine Zelle? So viel platz wie auf einem Blatt ist bekommst Du sicher nicht in eine Listbox ... Und unnötiger Programmieraufwand ...
Hallo, 

hier nochmal zur Verdeutlichung eine überarbeitete Beispieldatei.

Die Anwendung dient der Erleichterung des Ausfüllen eines mehrseitigen Formulars. Da gleichzeitig mehrere Anwender des Formular nutzen, muss jeder in der Lage sein, den aktuellen Bearbeitungszustand seines eigenen Formulars aus einer Datenbank wieder aufzurufen. 
Daher benötige ich eine Funktion um Inhalte aus Listboxen (zweispaltig) in Zellen zwischenzulagern (speichern) und wieder in Listboxen zu füllen und in eine Listbox eauf einer anderen Multipage zu übertragen.

Für Ideen und Anregungen wäre ich Euch dankbar. 

[attachment=44536]
Hallo,

mach es so:
Code:
Private Sub CommandButton4_Click()  'Schritt 3 aus Tabelle in Listbox7 einfügen
    Dim varZelle$, iZeichen As Long, i As Long, arrEinzel, arrList()
    varZelle = Tabelle1.Cells(3, 5)
    iZeichen = Len(varZelle)
    arrEinzel = Split(Mid(varZelle, 2, 500), vbCrLf)
    ReDim arrList(0 To UBound(arrEinzel), 0 To 1)
    For i = 0 To UBound(arrList)
        arrList(i, 0) = Left(arrEinzel(i), 1)
        arrList(i, 1) = Mid(arrEinzel(i), 3, 100)
    Next i
    With ListBox8
        .List = arrList
    End With
End Sub

Gruß Uwe
Fang erst mal an die ganze (spaghetti) Code zu reduzieren.

z.B.

Code:
Private Sub UserForm_Initialize()
  ListBox1.List = Tabelle1.Range("A1:A5").Value
  ListBox2.List = Tabelle1.Range("B1:B8").Value
End Sub

Private Sub ListBox1_Click()
  M_snb
End Sub

Private Sub ListBox2_Click()
  M_snb
End Sub

Sub M_snb()
  If ListBox1 <> "" And ListBox2 <> "" Then ListBox3.AddItem ListBox1.Value & ": " & ListBox2.Value
End Sub
Hallo Uwe, 

erstmal vielen Dank. Er übernimmt die Daten der ersten Spalte, also die Ziffern. 
Leider verstehe ich den Code nicht gut genug, um den Fehler zu entdecken. Wäre super, wenn du mir einiges erklären könntest.

Wofür steht z.B: das $ hinter varZelle? Kenne es nur aus der normalen Exceltabelle zum Festlegen von fixen Spalten/Zeilen in Formeln.
warum wird iZeichen= Len(varZelle) benötigt? Es werden hier doch "nur" die Anzahl der Zeichenfolge gezählt? wird diese Information weiterverarbeitet??? 
Im Lokalfenster wird mir angezeigt, dass iZeichen 0 (Long) ist.

Kenne die Kombi von Split und Mid auch leider nicht. 

Gruß Soldblub
Hallo,
die Listbox muss du 2 spaltig einstellen und ggf. die Spaltenbreiten ebenfalls, da du Diese ja 2-spaltig haben wolltest. 

Gruß Uwe
Sorry ich hatte vorhin wenig Zeit.

varZelle$ bedeutet: varZelle as String

iZeichen hatte ich vergessen rauszunehmen - stammte vom ersten Gedankengang.

arrEinzel = Split(Mid(varZelle, 2, 500), vbCrLf) Split trennt am Zeilenumbruch. In diesem Fall ab dem 2. Zeichen bis Zeichen 500
Damit kann der Zelleninhalt wieder in brauchbare Zeilen zurückgeschraubt werden.

arrList(i, 0) = Left(arrEinzel(i), 1)
arrList(i, 1) = Mid(arrEinzel(i), 3, 100)

verteilt die Zeile(n) aus arrEinzel in 2 Spalten der arrList

Gruß Uwe
Seiten: 1 2