2010-08-02 48 views
6

我在Excel中的一組數據是像下面(CSV格式),自動從Excel文件創建在Word表格

heading1, heading2, heading3, index 
A , randomdata1, randomdata2, 1 
A , randomdata1, randomdata2, 2 
A , randomdata1, randomdata2, 3 
B , randomdata1, randomdata2, 4 
C , randomdata1, randomdata2, 5 

我希望能夠自動建立一個word文檔呈現這些數據(按照標題1分組的信息)分成不同的表格。因此,在Word文檔會像

Table A 
heading1, heading2, heading3, index 
A , randomdata1, randomdata2, 1 
A , randomdata1, randomdata2, 2 
A , randomdata1, randomdata2, 3 

Table B 
heading1, heading2, heading3, index 
B , randomdata1, randomdata2, 4 

Table C 
heading1, heading2, heading3, index 
C , randomdata1, randomdata2, 5 

請會有人幫我這個,因爲這將節省約20小時很無聊複製粘貼&和格式!

感謝所有幫助

+0

查看你的輸出需求,我看不到'heading2'和'heading3'是如何發揮作用的。 'randomdata1'和'randomdata2'是否意味着所有列都完好無損*? – 2010-08-02 15:08:18

+0

嗯,有點困惑你的問題。標題1,標題2,標題3,索引是列標題,因爲該部分旨在用4列和5個條目表示excel中的表格。任何帶有randomData *的字段只是意味着一些可變的任意數據,細節並不重要。已經編輯了上面的內容,以顯示所有列的完好無損 – Dori 2010-08-02 15:16:16

+0

因此,每個表格中的所有四列*每個表格中填寫的值意味着* in tact *? – 2010-08-02 15:29:00

回答

9

大道,

希望這是隨時的幫助。

爲此,您需要設置對Word的引用 - 在VBA編輯器中,選擇「工具」>「引用」,然後向下滾動到Microsoft Word ##,其中##爲12.0爲Excel '07,11.0爲Excel '03,等等。另外,當你運行這個表時,不應該對錶單進行過濾,儘管你不需要按標題1進行排序,但我認爲你已經擁有了。

該代碼假定您的列表以單元格A1中的標題開頭。如果那不是真的,你應該這樣做。它還假設你最後一列是D.你可以在以「.Copy」開頭的行中調整它。

Sub CopyExcelDataToWord() 

Dim wsSource As Excel.Worksheet 
Dim cell As Excel.Range 
Dim collUniqueHeadings As Collection 
Dim lngLastRow As Long 
Dim i As Long 
Dim appWord As Word.Application 
Dim docWordTarget As Word.Document 

Set wsSource = ThisWorkbook.Worksheets(1) 
With wsSource 
    lngLastRow = .Range("A" & Rows.Count).End(xlUp).Row 
    Set collUniqueHeadings = New Collection 
    For Each cell In .Range("A2:A" & lngLastRow) 
     On Error Resume Next 
     collUniqueHeadings.Add Item:=cell.Value, Key:=cell.Value 
     On Error GoTo 0 
    Next cell 
End With 
Set appWord = CreateObject("Word.Application") 
With appWord 
    .Visible = True 
    Set docWordTarget = .Documents.Add 
    .ActiveDocument.Select 
End With 
For i = 1 To collUniqueHeadings.Count 
    With wsSource 
     .Range("A1").AutoFilter Field:=1, Criteria1:=collUniqueHeadings(i) 
     .Range("A1:D" & lngLastRow).Copy 
    End With 
    With appWord.Selection 
     .PasteExcelTable linkedtoexcel:=False, wordformatting:=True, RTF:=False 
     .TypeParagraph 
    End With 
Next i 

For i = 1 To collUniqueHeadings.Count 
    collUniqueHeadings.Remove 1 
Next i 
Set docWordTarget = Nothing 
Set appWord = Nothing 

End Sub 
+1

非常感謝您的回覆! 不幸的是,它沒有在昨天交付的時間。儘管讚賞:) – Dori 2010-08-04 10:14:09