Excel VBA分页符

时间:2015-06-16 18:48:54

标签: excel vba excel-vba

我有一本充满工作表的工作簿我试图将内容复制并粘贴到word文档中。现在,代码循环遍历所有工作表并将它们粘贴到word文档中,但相互叠加。我必须将wdDoc.Range(wdDoc.Characters.Count - 1).Paste更改为wdDoc.Range(wdDoc.Characters.Count - 1).PasteExcelTable False, False, False,我不确定这是否是问题的根源;它似乎正在创建一个新页面,但下一个工作表的内容并没有被粘贴到它中。我没有收到任何错误消息。任何建议将不胜感激!

Sub toWord()
Dim ws As Worksheet
Dim fromWB As Variant
Dim wdApp As Object
Dim wdDoc As Object
Dim docName As Variant
Dim rng As Range

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False


Set wdApp = CreateObject("Word.Application")
 wdApp.Visible = True
Set wdDoc = wdApp.Documents.Add
wdDoc.Activate
'Creates InputBox that allows user to enter name to save document as
docName = Application.InputBox(Prompt:="Enter Document Name", Title:="Save Word Document", Type:=2)
wdDoc.SaveAs2 fileName:=docName, FileFormat:=wdFormatDocument 'Saves document under user-provided name

fromWB = Application.GetOpenFilename(FileFilter:="Excel Workbook(*.xlsx),*.xlsx", Title:="Open Merged Data")
If fromWB <> False Then
Set fromWB = Workbooks.Open(fromWB)
ElseIf fromWB = False Then
    MsgBox "No File Selected"
    GoTo ResetSettings
End If


For Each ws In fromWB.Worksheets
    ws.Activate
    ws.Range("A1:A2").Select
    Selection.Copy
    Set wdApp = GetObject(, "Word.Application")
    wdApp.Visible = True
    wdDoc.Activate
    wdDoc.Range.Paste

    ws.Activate

    If ws.Range("A3").Value <> "" Then
    Range("A2").CurrentRegion.Offset(2).Resize(Range("A2").CurrentRegion.Rows.Count - 2).Select
    Selection.Columns.AutoFit
    Selection.Copy
    Set wdApp = GetObject(, "Word.Application")
    wdApp.Visible = True
    wdDoc.Activate
    wdApp.Selection.EndKey Unit:=wdStory
    wdApp.Selection.MoveDown Unit:=wdLine, Count:=1
    wdApp.Selection.TypeParagraph
    wdDoc.Range(wdDoc.Characters.Count - 1).PasteExcelTable False, False, False
    wdApp.Selection.Tables(1).Rows.Alignment = wdAlignRowCenter


    wdDoc.Range.Collapse Direction:=0
    wdDoc.Range(wdDoc.Characters.Count - 1).InsertBreak Type:=7
   End If
Next ws

wdDoc.Styles("Normal").NoSpaceBetweenParagraphsOfSameStyle = True
wdDoc.Save
Set wdDoc = Nothing
Set wdApp = Nothing
Set fromWB = Nothing
MsgBox "Imported into Word Document"


ResetSettings:
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True

End Sub

2 个答案:

答案 0 :(得分:0)

测试时占位符编辑:

Sub asdf()
    Dim ws As Worksheet
    Const wdStory = 6
    Const wdMove = 0

    For Each ws In ThisWorkbook.Worksheets
        ws.Range("A7").Copy
        Set docApp = GetObject(, "Word.Application")
        Set doc = docApp.Documents.Open("PATH OF FILE")
        docApp.Selection.EndKey wdStory
        docApp.Selection.PasteAndFormat wdPasteDefault
    Next ws

End Sub

答案 1 :(得分:0)

这是我开始工作的代码:

Sub toWord()
Dim ws As Worksheet
Dim fromWB As Variant
Dim wdApp As Object
Dim wdDoc As Object
Dim docName As Variant
Dim rng As Range

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False


Set wdApp = CreateObject("Word.Application")
wdApp.Visible = True
Set wdDoc = wdApp.Documents.Add
wdDoc.Activate
'Creates InputBox that allows user to enter name to save document as
docName = Application.InputBox(Prompt:="Enter Document Name", Title:="Save Word Document", Type:=2)
wdDoc.SaveAs2 fileName:=docName, FileFormat:=wdFormatDocument 'Saves document under user-provided name

fromWB = Application.GetOpenFilename(FileFilter:="Excel Workbook(*.xlsx),*.xlsx", Title:="Open Merged Data")
If fromWB <> False Then
Set fromWB = Workbooks.Open(fromWB)
ElseIf fromWB = False Then
    MsgBox "No File Selected"
    GoTo ResetSettings
End If

For Each ws In fromWB.Worksheets
    ws.Activate
    ws.Range("A1:A2").Select
    Selection.Copy
    Set wdApp = GetObject(, "Word.Application")
    wdApp.Visible = True
    wdDoc.Activate
    wdDoc.Range(wdDoc.Characters.Count - 1).Paste

    ws.Activate
    If ws.Range("A4").Value <> "" Then
    Application.Intersect(ws.UsedRange, ws.Cells.Resize(ws.Rows.Count - 2).Offset(2)).Select
    Selection.Columns.AutoFit
    Selection.Copy
    Set wdApp = GetObject(, "Word.Application")
    wdApp.Visible = True
    wdDoc.Activate
    wdApp.Selection.EndKey Unit:=wdStory
    wdApp.Selection.MoveDown Unit:=wdLine, Count:=1
    wdApp.Selection.TypeParagraph
    wdDoc.Range(wdDoc.Characters.Count - 1).PasteExcelTable False, False, False
    wdApp.Selection.Tables(1).Rows.Alignment = wdAlignRowCenter
    wdApp.Selection.Collapse Direction:=0
    wdDoc.Range(wdDoc.Characters.Count - 1).InsertBreak Type:=7
   Else
   wdDoc.Range(wdDoc.Characters.Count - 1).InsertBreak Type:=7
   End If
Next ws

wdDoc.Styles("No Spacing").NoSpaceBetweenParagraphsOfSameStyle = True
wdDoc.Save
Set wdDoc = Nothing
Set wdApp = Nothing
Set fromWB = Nothing
MsgBox "Imported into Word Document"


ResetSettings:
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True

End Sub