Daten aus ListView exportieren

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Daten aus ListView exportieren
von: DirkR
Geschrieben am: 21.06.2015 20:25:35

Hallo Excelgemeinde,
ich habe dank der Hilfe aus dem Forum folgenden Code zum Befüllen von ListView1 in einer UF (bei Veränderung einer Textbox). Das funktioniert auch super. Nun möchte ich zusätzlich einen CommandButton, der den gesamten Inhalt von ListView1 in eine "neue" Arbeitsmappe kopiert.
Ich komme da einfach nicht weiter und bitte um Hilfe!
Hier mein Code:
Klassenmodul - Klasse1
Option Explicit
Option Compare Text
Public WithEvents objText As MSForms.TextBox

Private Sub objText_Change()
'Kontaktinfos.TextBox21 = Format(Kontaktinfos.TextBox21, "#,###.00 €")
Application.ScreenUpdating = False
Dim ArList
Dim booFund As Boolean, booListeLeer As Boolean
Dim nCount&, n&, nn&
With Kontaktinfos
    .Frame1.Caption = "Kundenübereinstimmungen"
    .ListView1.BackColor = -2147483643 '12632064
    If .Tag <> "" Then Exit Sub
    
    With Tabelle1
        ArList = .Range("F2", .Cells(.Rows.Count, 7).End(xlUp)).Resize(, 30)
    End With
    booListeLeer = True
    For n = LBound(ArTxT) To UBound(ArTxT)
        If ArTxT(n).objText <> "" Then booListeLeer = False: Exit For
    Next n
    ListView_ScreenUpdating .ListView1, False
    With .ListView1
        .ListItems.Clear
        For n = 3 To UBound(ArList)
            If Not booListeLeer Then
                booFund = True
                For nn = 1 To 30
                    If Not (ArList(n, nn) Like ArTxT(nn).objText & "*") _
                            And ArTxT(nn).objText <> "" Then
                        booFund = False
                        Exit For
                    End If
                Next nn
            End If
            If booFund Or booListeLeer Then
                nCount = nCount + 1
                .ListItems.Add nCount, , ArList(n, 1)
                For nn = 2 To 30
                    .ListItems(nCount).SubItems(nn - 1) = ArList(n, nn)
                Next nn
                booFund = False
            End If
        Next n
    End With
    LVColumnWidth .ListView1, True
    ListView_ScreenUpdating .ListView1, True
End With
Application.ScreenUpdating = True
End Sub
Vielen Dank schon mal im Voraus.
Gruß DirkR

Bild

Betrifft: AW: Daten aus ListView exportieren
von: Nepumuk
Geschrieben am: 22.06.2015 09:13:03
Hallo,
ein Beispiel:

Private Sub CommandButton2_Click()
    Dim avntTemp As Variant
    Dim lngRow As Long, lngColumn As Long
    With ListView1
        Redim avntTemp(1 To .ListItems.Count, 1 To .ColumnHeaders.Count)
        For lngRow = 1 To .ListItems.Count
            avntTemp(lngRow, 1) = .ListItems(lngRow).Text
            For lngColumn = 2 To .ColumnHeaders.Count
                avntTemp(lngRow, lngColumn) = .ListItems(lngRow).ListSubItems(lngColumn - 1).Text
            Next
        Next
    End With
    Tabelle1.Cells(1, 1).Resize(UBound(avntTemp, 1), UBound(avntTemp, 2)) = avntTemp
End Sub

Gruß
Nepumuk

Bild

Betrifft: AW: Daten aus ListView exportieren
von: DirkR
Geschrieben am: 25.06.2015 19:50:22
Hallo Nepumuk, Hallo Forumsmitglieder!
Sorry, dass ich erst jetzt eine Rückmeldung gebe. Konnte aber leider erst heute dein Beispiel testen.
Es klappt super!!!!!
Vielen Dank!!!
Ich hätte noch ein Anliegen....
Mit folgendem Code fülle ich ListView1 nach 3 Kriterien.
1. Spalte 1 = "aktiv"
2. Spalte 4 = Wert größer null und <= Heute
3. Spalte18 = "Personxy"
Das klappt auch ganz gut. Allerdings werden die Daten so von Zeile zu Zeile eingelesen. Ich hätte aber gerne, dass die Daten aufsteigend nach Spalte 4 in ListView1 geschrieben werden. Also das älteste Datum zuerst bis zum heutigen Datum.
Das habe ich auch schon hinbekommen (siehe unten die auskommentierten Zeilen). Allerdings wird das ganze dann sehr lahm, wenn die Datenmenge einen gewissen Umfang erreicht hat.
Ich komme da aber nicht weiter!?!?!
Bitte um Hilfe!

Private Sub CommandButton10_Click()
'#### Wiedervorlage bis inkl. Heute - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Dim ArList, minDatum As Date, Datum As Date
Dim booFund As Boolean, booListeLeer As Boolean
Dim nCount&, n&, nn&
Dim I As Integer
  
Application.ScreenUpdating = False
  With Kontaktinfos
  .Tag = "1"
    Call EingabeAbgleichen
      .CheckBox1.Value = True
      TextBox1.Value = "aktiv"
      For I = 2 To 17
        .Controls("Textbox" & I).Value = ""
      Next I
      For I = 19 To 30
        .Controls("Textbox" & I).Value = ""
      Next I
      
      With Sheets("Eingabe")
          ArList = .Range("F2", .Cells(.Rows.Count, 7).End(xlUp)).Resize(, 30)
          minDatum = Application.WorksheetFunction.Min(.Range("I:I"))
      End With
  
      With .ListView1
          .ListItems.Clear
          ListView_ScreenUpdating Kontaktinfos.ListView1, False
          'For Datum = minDatum To Date
            For n = 3 To UBound(ArList)
                If ArList(n, 1) = "aktiv" And ArList(n, 4) > 0 And ArList(n, 4) <= Date And  _
LCase(Left(ArList(n, 18), Len(TextBox18.Value))) = LCase(TextBox18.Value) And ArList(n, 1) = "aktiv" Then  'And ArList(n, 4) = Datum
                    nCount = nCount + 1
                    .ListItems.Add nCount, , ArList(n, 1)
                    For nn = 2 To 30
                        .ListItems(nCount).SubItems(nn - 1) = ArList(n, nn)
                    Next nn
                End If
            Next n
          'Next Datum
          ListView_ScreenUpdating Kontaktinfos.ListView1, True
          LVColumnWidth Kontaktinfos.ListView1, True
      End With
      .Frame1.Caption = "Wiedervorlagedatum Heute und älter"
      .ListView1.BackColor = 16777088 '-2147483643
  .Tag = ""
  End With
Application.ScreenUpdating = True
End Sub
Vielen Dank schon mal!
Gruß DirkR

Bild

Betrifft: AW: Daten aus ListView exportieren
von: DirkR
Geschrieben am: 25.06.2015 20:23:45
Hallo Nepumuk,
ich habe noch eine Frage. Wie bekomme ich die ListView1-Überschriften noch in die Tabelle?
Schon mal vielen Dank!!!
Gruß DirkR

Bild

Betrifft: AW: Daten aus ListView exportieren
von: Nepumuk
Geschrieben am: 26.06.2015 08:03:20
Hallo,
1. Schreib die Daten erst in ein Array welches du sortierst bevor du es in das ListView übernimmst. Das ListView lässt sich zwar sortieren, aber das ist nicht ganz trivial, speziell der Zugriff auf die ListItems nach dem Sortieren ist nicht ganz einfach.
2. So:

Private Sub CommandButton2_Click()
    Dim avntTemp As Variant
    Dim lngRow As Long, lngColumn As Long
    With ListView1
        Redim avntTemp(0 To .ListItems.Count, 1 To .ColumnHeaders.Count)
        For lngColumn = 1 To .ColumnHeaders.Count
            avntTemp(0, lngColumn) = .ColumnHeaders(lngColumn).Text
        Next
        For lngRow = 1 To .ListItems.Count
            avntTemp(lngRow, 1) = .ListItems(lngRow).Text
            For lngColumn = 2 To .ColumnHeaders.Count
                avntTemp(lngRow, lngColumn) = .ListItems(lngRow).ListSubItems(lngColumn - 1).Text
            Next
        Next
    End With
    Tabelle1.Cells(1, 1).Resize(UBound(avntTemp, 1) + 1, UBound(avntTemp, 2)) = avntTemp
End Sub

Gruß
Nepumuk

Bild

Betrifft: AW: Daten aus ListView exportieren
von: DirkR
Geschrieben am: 28.06.2015 20:29:14
Hallo Nepumuk,
vielen Dank für deine Hilfe. Punkt 2 funktioniert einwandfrei.
Punkt 1 bekomme ich nicht hin.Ich schaffe es nicht die Daten in einem Array zu sortieren. :-(
Ist es ratsam einfach die Tabelle vorher nach Spalte H aufsteigensd zu sortieren, dann die Daten in das ListView, und dann die Tabelle wieder sortieren, wie sie vorher war????
Das würde ich hinbekommen!
Gruß DirkR

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Daten aus ListView exportieren"