AW: Ach, wie schön, wenn es dann funzt ...
09.02.2014 12:52:47
Christian
Hallo Dietmar,
auf die gleiche Art, wie du die Listbox füllst, kannst du die Werte auch in ein Tabellenblatt oder in eine neue xl-Mappe schreiben.
Dabei ist es sinnvoll, die Werte beim Auslesen zunächst in ein Array zu schreiben und dieses Array anschließend komplett in das Ziel-Tabellenblatt zu übergeben. Das ist einiges schneller als jeden Wert einzeln in die betreffende Zelle zu schreiben.
Bsp: füge ein CommandButton mit dem Namen "cmdExport" in das Userformular ein:
Private Sub cmdExport_Click()
Dim i As Long, j As Long, k As Long
Dim vntSp As Variant, vntRes As Variant
Dim dblSum As Double
vntSp = Array(1, 2, 3, 5, 6, 8)
'Werte aus 1. Tabellenblatt lesen
With ThisWorkbook.Sheets(1)
'zähle Einträge in Spalte C
For i = 201 To 400
If .Cells(i, 3) > 0 Then
k = k + 1
End If
Next
If k > 0 Then
'Array dimensionieren
ReDim vntRes(k, UBound(vntSp))
'Überschriften aus Zeile 200
For j = 0 To UBound(vntSp)
vntRes(0, j) = .Cells(200, vntSp(j))
Next
'Werte in Array schreiben
k = 1
For i = 201 To 400
If .Cells(i, 3) > 0 Then
For j = 0 To UBound(vntSp)
vntRes(k, j) = .Cells(i, vntSp(j))
Next
k = k + 1
End If
'Gesamtsumme ermitteln
dblSum = dblSum + .Cells(i, 6)
Next
End If
End With
'Ergebnis in 2. Tabellenblatt schreiben
With ThisWorkbook.Sheets(2)
.Cells.Delete
.Cells(1, 1).Resize(k, UBound(vntSp) + 1) = vntRes
.Cells(k + 1, 1) = "Summe:"
.Cells(k + 1, 5) = dblSum
.Cells(2, 4).Resize(k, 2).NumberFormat = "#,##0.00 $"
End With
'Speicher freigeben
Erase vntRes
End Sub
Beachte: Alle Einträge im 2. Tabellenblatt werden zuvor gelöscht.
Gruß
Christian