2010-08-02 55 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