Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
876to880
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
876to880
876to880
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Inhalt von Listbox aus Userform exportieren

Inhalt von Listbox aus Userform exportieren
15.06.2007 15:49:00
Listbox
Hallo Leute,
ich lass mir auf einer Listbox einer Userform verschiedene Inhalte dynamisch anzeigen.
Je nachdem was der User vorher per Comboboxen ausgewählt hat, wird die Userform mit verschiedenen Inhalten befüllt.
Gibt es eine einfache Methode, den momentan in der Listbox angezeigten Inhalt automatisch in eine andere Excel-Mappe exportieren zu lassen mit vorheriger Speicherplatzauswahl und Fertigmeldung nach Vollendung des Exports?
Evtl. ist es ja einfach?!
Danke schon mal!
Gruß Till

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Inhalt von Listbox aus Userform exportieren
15.06.2007 18:18:23
Listbox
Hallo Till,
Beispiel:
Private Sub CommandButton1_Click()
    With Workbooks("Mappe1.xls").Worksheets("Tabelle1")
        .Range(.Cells(1, 1), .Cells(ListBox1.ListCount, 1)).Value = ListBox1.List
    End With
End Sub

Gruß
Nepumuk

Anzeige
AW: Inhalt von Listbox aus Userform exportieren
15.06.2007 20:52:00
Listbox
Hallo Nepumuk,
das ist schon fast gut..
Das einzige Problem ist, dass ich in der Listbox Daten anzeige, die ich aus einer txt-Datei einlese, und zwar so, dass ich die txt-Datei nur in Excel öffne, aber diese nicht als xls-Datei abspeichere.
D.h. ich muss vorher in Deinem Code das Worksheet richtig addressieren.
Hab mal das hier versucht,


Private Sub Image9_Click()
'export listbox
    'With Workbooks("Mappe1.xls").Worksheets("Tabelle1")
    With Excel.Application.Worksheets("Wertetabelle")
        .Range(.Cells(1, 1), .Cells(ListBox1.ListCount, 1)).Value = ListBox1.List
    End With
End Sub


darin macht er aber noch einen Fehler in der zweiten Code-Reihe.
Außerdem seh ich darin nicht wirklich die Exportfunktion, also, dass der Inhalt der Listbox z.b. als "C:\wertetabelle.xls" gespeichert wird.
Hast Du vielleicht noch eine andere Idee?
Danke!
Gruß Till

Anzeige
AW: Inhalt von Listbox aus Userform exportieren
15.06.2007 21:00:53
Listbox
Hallo Till,
A: Welchen Fehler?
B: Gibt es die Tabelle überhaupt?
Gruß
Nepumuk

AW: Inhalt von Listbox aus Userform exportieren
15.06.2007 21:21:00
Listbox
Hallo Nepumuk,
der Fehler kommt doch nicht mehr.
Es kommt aber auch sonst nichts.
Also nochmal:
Aus dem Sheet "Wertetabelle" was ich dynamisch in der geöffneten txt-Datei erstellt habe (diese will ich auch nicht speichern, da sie dann verändert wird) lese ich verschiedene unabhängige Spalten in die Listbox1 auf der Userform ein.
Sagen wir mal Spalte A-D und dann wieder H-J.
Jetzt such ich etwas, wo ich von der Userform aus den eben in der Listbox angezeigten Inhalt per Mouseklick (inkl. Abfrage!, wohin das ganze denn gespeichert werden soll) als separate CSV oder XLS Datei exportieren kann.
Hier will ich natürlich all die Spalten nicht, die ich vorher ja beim Einlesen "aussortiert" habe.
Ich hoffe, es ist jetzt ein wenig klarer geworden!
Gruß Till

Anzeige
AW: Inhalt von Listbox aus Userform exportieren
17.06.2007 19:56:48
Listbox
Hi,
das rückschreiben des Listboxinhaltes in eine neue Datei kannst du mit diesem Makro erledigen.
den Speicherort erfragt Excel dann beim Schließen der neuen Datei automatisch, hier kannst du auch auswählen, als was die Datei gespeichert werden soll.

Sub Listbox_auslesen()
Dim i As Long
Dim j As Long
Workbooks.Add
With UserForm1.ListBox1
For i = 0 To .ListCount - 1
For j = 0 To .ColumnCount - 1
Cells(i + 1, j + 1) = .List(i, j)
Next
Next
End With
ActiveWorkbook.Close
End Sub


AW: Inhalt von Listbox aus Userform exportieren
17.06.2007 23:50:00
Listbox
Hallo Daniel,
das hat schon mal super geklappt.
Da der Rückleseprozess (bei ca. 2000 Zeilen) relativ lang dauert, wie bau ich da evtl. eine Fortschrittsanzeige ein?
Des weiteren wäre es schön, wenn ich die Datei automatisch in einen von mir definierten Pfad als z.B. txt-Datei mit TAB-Separierung speichern könnte.
Am liebsten wäre es mir natürlich, wenn die Datei dann auch noch den ersten Eintrag in der zweiten Spalte der Listbox als Namen hätte.
Zum Dateinamen hatte ich mal folgendes probiert, hatte aber noch nicht direkt geklappt, da ich den Namen aus den anderen offenen Arbeitsblättern nehmen wollte, die aber aus der geöffneten TXT-Datei herrührte.


Private Sub Image9_Click()
   MsgBox "Einen Moment bitte," & vbLf & "die Daten werden geschrieben.", vbInformation, " "
   Dim i As Long
   Dim j As Long
   Dim sFile As String, abook, bbook, dtTime As Date, sSep As String
   Workbooks.Add
   With Verkehr.ListBox1
      For i = 0 To .ListCount - 1
         For j = 0 To .ColumnCount - 1
            Cells(i + 1, j + 1) = .List(i, j)
         Next
      Next
   End With
   dtTime = Now
   'abook = Excel.Application.Worksheets("Wertetabelle").Range("F1").Value   ' VDE...
   'bbook = Excel.Application.Worksheets("Wertetabelle").Range("E5").Value   ' Datum
   sFile = ThisWorkbook.Path & Application.PathSeparator _
           & "Datenexport_" & dtTime & "_" & ".csv"  '& bbook & "_" & abook & "_" & ".csv"
'   ActiveWorkbook.SaveAs _
'         Filename:=sFile ', _
'         'FileFormat:=xlCSV
   sSep = ";"
   'Close
   ActiveWorkbook.Close
   MsgBox "Datei wurde angelegt:" & vbLf & sFile, vbInformation, " "
End Sub


Deswegen hab ich alles, was leider (noch) nicht so richtig funktioniert wieder auskommentiert!
Hast Du da noch hilfreiche Ideen?
Danke schon mal!
Gruß Till

Anzeige
AW: Inhalt von Listbox aus Userform exportieren
18.06.2007 02:06:00
Listbox
Hallo Till,
die Daten der Listbox kannst du auch ohne den Umweg über eine Arbeitsmappe direkt in ein Text/CSV-File schreiben.

Private Sub Image9_Click()
MsgBox "Einen Moment bitte," & vbLf & "die Daten werden geschrieben.", vbInformation, " "
Dim i As Long
Dim j As Long
Dim sFile As String, stext$, sTime$, sSep As String
iFilenr = FreeFile
sSep = ";"
sTime = Format(Now, "YYYYMMDD_hhmmss")
With Verkehr.ListBox1
sFile = ThisWorkbook.Path & Application.PathSeparator _
& "Datenexport_" & sTime & "_" & .List(0, 1) & ".csv"
Open sFile For Output As iFilenr
For i = 0 To .ListCount - 1
stext = .List(i, 0)
For j = 1 To .ColumnCount - 1
stext = stext & sSep & .List(i, j)
Next
Print #iFilenr, stext
stext = ""
Next
Close iFilenr
End With
MsgBox "Datei wurde angelegt:" & vbLf & sFile, vbInformation, " "
End Sub


Das Poblem bei deinem Code ist unter anderem das Einfügen des Datums in den Dateinamen. Punkte/ _ Doppelpunkte sind unzulässige Zeichen in Dateinamen. Mit folgenden Anpassungen sollte dein Code laufen:


Private Sub Image9_Click()
MsgBox "Einen Moment bitte," & vbLf & "die Daten werden geschrieben.", vbInformation, " "
Dim i As Long
Dim j As Long
Dim sFile As String, abook, bbook, dtTime As Date, sSep As String
Dim wbThis As Workbook, wbTemp As Workbook
Set wbThis = ThisWorkbook
Workbooks.Add
Set wbTemp = ActiveWorkbook
With Verkehr.ListBox1
For i = 0 To .ListCount - 1
For j = 0 To .ColumnCount - 1
Cells(i + 1, j + 1) = .List(i, j)
Next
Next
End With
dtTime = Now
abook = wbThis.Worksheets("Wertetabelle").Range("F1").Value   ' VDE...
bbook = wbThis.Worksheets("Wertetabelle").Range("E5").Value   ' Datum
sFile = wbThis.Path & Application.PathSeparator _
& "Datenexport_" & Format(dtTime, "YYYYMMDD_hhmmss") & "_" & ".csv" '& bbook & "_" _
& abook & "_" & ".csv"
wbTemp.SaveAs FileName:=sFile, FileFormat:=xlCSV
sSep = ";"
wbTemp.Close
MsgBox "Datei wurde angelegt:" & vbLf & sFile, vbInformation, " "
End Sub


Anzeige
AW: Inhalt von Listbox aus Userform exportieren
18.06.2007 10:43:00
Listbox
Hallo fcs,
vielen Dank für Deine 2 Vorschläge und das zu so einer nachtschlafenen Zeit ;-)
Dein 2. Versuch klappt prima, dauert aber (durch den Umweg des Schreibens in Excel bei 2400 Zeilen) verdammt lange.
Ich würde daher die 1. Variante präferieren.
Momentan sieht die bei mir so aus:


Private Sub Image9_Click()
   MsgBox "Einen Moment bitte," & vbLf & "die Daten werden geschrieben.", vbInformation, " "
   Application.ScreenUpdating = False
   Dim i As Long
   Dim j As Long
   Dim sFile As String, stext$, sTime$, sSep As String, iFilenr
   iFilenr = FreeFile
   sSep = ";"
   sTime = Format(Now, "YYYYMMDD_hhmmss")
   With Verkehr.ListBox1
      sFile = ThisWorkbook.Path & Application.PathSeparator _
           & "Datenexport_" & sTime & "_" & .List(0, 1) & ".csv"
      Open sFile For Output As iFilenr
      For i = 0 To .ListCount - 1
          stext = .List(i, 0)
         For j = 1 To .ColumnCount - 1
            stext = stext & sSep & .List(i, j)
         Next
         Print #iFilenr, stext
         stext = ""
      Next
      Close iFilenr
   End With
   Application.ScreenUpdating = True
   MsgBox "Datei wurde angelegt:" & vbLf & sFile, vbInformation, " "
End Sub


Leider kommt aber in der Zeile:
Open sFile For Output As iFilenr
noch der Fehler "52: Dateiname oder -nummer falsch!"
Was hat das zu bedeuten, bzw. wie umgehen wir das?
Ein weiterer Wunsch wäre noch, in den Namen der Datei den ersten Eintrag aus der zweiten Spalte in der Listbox mit einzubauen. Das Datum ist schon gut, aber nicht ausreichend, weil hier sicherlich viele verschiedene Dateien exportiert werden und somit die nachträgliche Unterscheidung leichter fallen wird!
Danke schon mal!
Gruß Till

Anzeige
AW: Inhalt von Listbox aus Userform exportieren
18.06.2007 23:43:00
Listbox
Hallo Till,
bei mir (Excel97, Win98) funktioniert das Makro einwandfrei. 4-spaltige Listbox mit 2500 Zeilen wird in weniger als 2 Sekunden in das File geschrieben.
Die Sache mit dem Eintrag aus der 1. Zeile der 2. Spalte als Ergänzung im Dateinamen hatte ich schon eingebaut. Möglicherweise war das jetzt aber auch das Problem, falls in diesem Eintrag für Dateinamen unzulässige Zeichen enthalten sind oder der Eintrag zulang ist.
Ich hab das Makro jetzt mal entsprechend angepasst, so dass ungültige Zeichen aus dem Eintrag entfernt werden und der zusätzliche Eintrag auf 50 Zeichen gekürzt wird. Auf die Deaktivierung der Bildschirmaktualisierung kannst du in diesem Makro verzichten, da keine Tabellendaten etc. geschrieben werden.
Gruß
Franz

Private Sub Image9_Click()
MsgBox "Einen Moment bitte," & vbLf & "die Daten werden geschrieben.", vbInformation, " "
Dim i As Long
Dim j As Long
Dim sFile$, stext$, sTime$, sSep$, ungueltig As Variant, sZusatz$
iFilenr = FreeFile
sSep = ";"
sTime = Format(Now, "YYYYMMDD_hhmmss")
'Arrayvariable mit den ungültigen/unschönen Zeichen in Dateinamen
ungueltig = Array("""", "/", "\", ":", "|", "'", ".")
With Verkehr.ListBox1
'Zusatz für Dateinamen aus Listbox 2. Spalte, 1.Zeile
If .ColumnCount >= 1 Then
sZusatz = .List(0, 1)
'Zusatz ggf. kürzen
If Len(sZusatz) > 50 Then sZusatz = Left(sZusatz, 50)
'Zusatz auf ungültige Zeichen prüfen und ggf. durch "_" ersetzen
For i = LBound(ungueltig) To UBound(ungueltig)
If InStr(1, sZusatz, ungueltig(i)) > 0 Then
sZusatz = Application.WorksheetFunction.Substitute(sZusatz, ungueltig(i), "_")
'sZusatz = Replace(sZusatz, ungueltig(i), "_") 'nur in neueren Excelversionen
End If
Next
End If
sFile = ThisWorkbook.Path & Application.PathSeparator _
& "Datenexport_" & sTime & IIf(.ColumnCount >= 1, "_" & sZusatz, "") & ".csv"
Open sFile For Output As iFilenr
For i = 0 To .ListCount - 1
stext = .List(i, 0)
For j = 1 To .ColumnCount - 1
stext = stext & sSep & .List(i, j)
Next
Print #iFilenr, stext
stext = ""
Next
Close iFilenr
End With
MsgBox "Datei wurde angelegt:" & vbLf & sFile, vbInformation, " "
End Sub


Anzeige
AW: Inhalt von Listbox aus Userform exportieren
19.06.2007 23:30:38
Listbox
Hallo Franz,
Deine Lösung hab ich auch verwurschtelt.
Die ist einfach genial. Super schnell und toll auch das mit dem Namenszusatz!
Das schöne an Deiner Lösung ist auch, dass man beliebig den Namen zw. CSV oder TXT variieren kann.
Hab mir jetzt also einen Button für TXT und einen für CSV geschaffen.
Immer wieder klasse was Ihr hier so im Forum drauf habt!
Noch einmal vielen Dank!
Gruß aus Trier!
Till

AW: Inhalt von Listbox aus Userform exportieren
18.06.2007 20:42:00
Listbox
Hi
bei 2000 Zeilen ist es so natürlich etwas langsam. ( wer liest so lange Listboxen?)
hab nochmal nachgedacht, es geht auch schneller (und einfacher)
dafür brauchst du keine Fortschrittsanzeigen:

Sub ListBox_zurückschreiben()
Workbooks.Add
With UserForm1.ListBox1
Cells(1, 1).Resize(.ListCount, .ColumnCount - 1) = .List
End With
ActiveWorkbook.Close
End Sub


Gruß, Daniel

Anzeige
AW: Inhalt von Listbox aus Userform exportieren
18.06.2007 23:00:00
Listbox
Hallo Daniel,
genial...
Klappt super! Und wahnsinnig schnell!
Vielen Dank !
Gruß Till

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige