2017-02-20 1 views
1

Ich habe Daten in einem ListView und möchte diese Daten mit Spaltenüberschriften in eine neue Excel-Datei und eine PDF-Datei exportieren.So exportieren Sie Daten von ListView in Excel und PDF (VBA)

Die LV wird wie folgt definiert:

'listview: 
    | # | Col1 | Col2 | Col3 | ... 
    ================================== 
    | 1 | Val1 | Val2 | Val3 | ... 

ich mit diesem Code gestartet:

Dim objExcel As Excel.Application 
Dim objWb As Excel.Workbook 
Dim objWs As Excel.Worksheet 
Dim objRange As Excel.Range 
Dim i%, j% 

On Error GoTo errMsg 

Set objExcel = New Excel.Application 
objExcel.Visible = False 

Set objWb = objExcel.Workbooks.Add 
Set objWs = objWb.Sheets("Sheet1") 

With objWs 
     For i = 1 To Me.lvlist.ListItems.Count 
      .Cells(i, 1) = Me.lvlist.ListItems(i).Text 

      For j = 1 To Me.lvlist.ListItems(i).ListSubItems.Count 
       .Cells(i, j + 1) = Me.lvlist.ListItems(i).SubItems(j) 
      Next j 
     Next i 
End With 

objExcel.Visible = True 
objWs = Nothing 
objWb = Nothing 
objExcel = Nothing 

Aber ich erhalte eine Fehlermeldung. Wie kann ich meine Absicht erreichen? Danke für Ihre Hilfe.

EDIT: Ich habe den Code oben bearbeitet und jetzt bekomme ich die error 438: Object doesn't support this property or method. Und die Spaltenheader exportieren nicht in Excel.

+1

Ihre 2. Schleife muss Unterpunkte zählen –

+0

In welcher Zeile ist der Fehler an? –

Antwort

0

ich mein Problem gelöst. Hier ist der folgende Code, der die Column mit Daten in einer Excel exportiert:

With Me.lvlist 
    For k = 1 To .ColumnHeaders.Count 
     objWs.Cells(1, k) = .ColumnHeaders.item(k).Text 
     objWs.Cells(1, k).Font.Bold = True 
     objWs.Cells(1, k).Font.Size = 12 
     objWs.Cells(1, k).Interior.Color = vbYellow 
    Next 

    For i = 2 To .ListItems.Count + 1 
     objWs.Cells(i, 1) = .ListItems(i - 1).Text 

     For j = 1 To .ListItems(i - 1).ListSubItems.Count 
      objWs.Cells(i, j + 1) = .ListItems(i - 1).SubItems(j) 
     Next 
    Next 
End With 

Es funktioniert sehr gut :) .. aber dank R3UK für Ihre Unterstützung und Mühe!

0

Sie waren in der Nähe, aber man benötigt, um die .Count des SubItems des spezifischen Item zu verwenden:
Me.lvlist.ListItems(i - 1).SubItems.Count

Dim objExcel As Excel.Application 
Dim objWb As Excel.Workbook 
Dim objWs As Excel.Worksheet 
Dim objRange As Excel.Range 
Dim SubItmCount As Long 
Dim i%, j% 

On Error GoTo errMsg 

Set objExcel = New Excel.Application 
objExcel.Visible = False 

Set objWb = objExcel.Workbooks.Add 
Set objWs = objWb.Sheets("Sheet1") 

With objWs 
     For i = 1 To Me.lvlist.ListItems.Count 
      .Cells(i, 1) = Me.lvlist.ListItems(i - 1).Text 
      SubItmCount = Me.lvlist.ListItems(i - 1).SubItems.Count - 1 '<== argument is not optional .SubItems(..) 
      For j = 1 To SubItmCount 
       .Cells(i, j + 1) = Me.lvlist.ListItems(i - 1).SubItems(j).Text 
      Next 
     Next 
End With 

objExcel.Visible = True 
objWs = Nothing 
objWb = Nothing 
objExcel = Nothing 
+0

Bitte schauen Sie sich meinen bearbeiteten Post an :) – yuro

+0

@yuro: Fertig, schauen Sie sich bitte auch meine an **: p ** Sie verwenden 'ListSubItems' anstelle von' SubItems' (wie in meiner Antwort)! ;) – R3uK

+0

Ich habe deine Antwort gesehen, aber als ich versucht habe "SubItems" zu nehmen, habe ich einen Fehler bekommen. 'Argument ist nicht optional' – yuro

Verwandte Themen