2017-02-20 61 views
1

我在ListView中有數據並希望將這些數據與列標題一起導出到新的Excel文件和PDF文件中。如何將數據從ListView導出到Excel和PDF(VBA)

的LV的定義如下:

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

我開始使用此代碼:

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 

但我得到一個錯誤。我怎樣才能達到我的意圖?謝謝你的幫助。

編輯: 我編輯了上面的代碼,現在我得到error 438: Object doesn't support this property or method。並且列標題不會導出爲ex​​cel。

+1

你的第二個循環需要分項計數 –

+0

哪一行是錯誤? –

回答

0

我解決我的問題。這是下面的代碼,其中出口的columnheaders數據在Excel:

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 

它非常好:)。但是感謝R3UK的支持和努力!

0

你接近,但你需要使用特定ItemSubItems.Count
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

請看看我編輯過的帖子:) – yuro

+0

@yuro:完成了,請仔細看看我的** **:p **您正在使用'ListSubItems'而不是'SubItems'(就像我的回答)! ;) – R3uK

+0

我看到了你的答案,但是當我試圖採取'SubItems'時,我得到了一個錯誤。 '參數不是可選的' – yuro