Listboxinhalt kopieren und zurück
#1
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


Angehängte Dateien
.xlsm   MUster_ListboxmitFreitextfeld - Kopie.xlsm (Größe: 36,02 KB / Downloads: 4)
Antworten Top
#2
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 ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • soldblub
Antworten Top
#3
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???
Antworten Top
#4
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 ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#5
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. 


.xlsm   MUSTER_ListboxmitFreitextfeld2.xlsm (Größe: 35,75 KB / Downloads: 5)
Antworten Top
#6
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
Antworten Top
#7
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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#8
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
Antworten Top
#9
Hallo,
die Listbox muss du 2 spaltig einstellen und ggf. die Spaltenbreiten ebenfalls, da du Diese ja 2-spaltig haben wolltest. 

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Egon12 für diesen Beitrag:
  • soldblub
Antworten Top
#10
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
[-] Folgende(r) 1 Nutzer sagt Danke an Egon12 für diesen Beitrag:
  • soldblub
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste