复制并粘贴新页面

时间:2015-06-01 14:21:03

标签: excel vba excel-vba

我正在尝试编写一个代码,将单个工作簿中多个工作表的内容复制到一个word文档中。我希望每个工作表的内容都在它自己的页面上,但是现在,我的代码只是复制和粘贴彼此而不是进入新页面并粘贴。我已经尝试过到文档的末尾,但它没有工作......任何建议都会有所帮助。

 Sub ToWord()
Dim ws As Worksheet
Dim Wkbk1 As Workbook
Set Wkbk1 = ActiveWorkbook


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

For Each ws In ActiveWorkbook.Worksheets
ws.Range("A1:A2").Copy
Dim wdapp As Object
Dim wddoc As Object
Dim Header As Range
Dim strdocname As String
'file name & folder path
On Error Resume Next
'error number 429
Set wdapp = GetObject(, "Word.Application")
If Err.Number = 429 Then
    Err.Clear
    'create new instance of word application
    Set wdapp = CreateObject("Word.Application")
End If
wdapp.Visible = True
'define paths to file
strdocname = "C:\Doc.doc"
If Dir(strdocname) = "" Then
    MsgBox "The file" & strdocname & vbCrLf & "was not found " & vbCrLf & "C:\Doc.doc", vbExclamation, "The document does not exist "
    Exit Sub
End If

wdapp.Activate
Set wddoc = wdapp.Documents(strdocname)
If wddoc Is Nothing Then Set wddoc = wdapp.Documents.Open(strdocname)

'must activate to be able to paste
wddoc.Activate
wddoc.Range.Paste

Next ws

'Clean up
Set wddoc = Nothing
Set wdapp = Nothing

Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True

End Sub

2 个答案:

答案 0 :(得分:2)

你可以使用:

wddoc.Range(i).Paste

在每张图像后将i递增1。他们一个接一个地贴上它们。

或更简单:

wddoc.Range(wddoc.Characters.Count-1).Paste

然后可能变得更复杂,并且如果图像很小,则在每个图像之间手动添加分页符以确保每个页面的新页面:

wddoc.Range(wddoc.Characters.Count-1).InsertBreak Type:=7 

https://msdn.microsoft.com/en-us/library/office/ff821608.aspx

答案 1 :(得分:0)

修改

首先,我错误地假设" wddoc.range"属性将在光标所在的位置获得。这不是真的。您需要使用Miss Palmer提供的代码(并在下面复制)。

然而,还有一个我最初没有注意到的问题。您的循环设置不正确。您正在循环并不断重新打开doc这个词。你需要移动这些行:

For Each ws In ActiveWorkbook.Worksheets
    ws.Range("A1:A2").Copy

这样他们就在上方     wddoc.Range(wddoc.Characters.Count - 1).Paste

线。这将导致循环正确执行,并且只打开一次doc文字。

另外(再次,根据帕尔默小姐),你想把它放在:

wddoc.Range(wddoc.Characters.Count - 1).Paste
wddoc.Range(wddoc.Characters.Count - 1).InsertBreak (wdPageBreak)after the line:

而不是" .range.paste"你最初的。

你的"选择"的另一个问题line是您没有指定要使用的应用程序。这是默认使用Excel的选择,因为它是从Excel运行的。

此代码假定您的Word文档没有足够的页面。否则你可能会使用你想要的代码,但是不清楚为什么你会有一个包含很多页面的空白word文档。您仍然需要指定要移至下一页的应用,因此请输入" wdapp。"在选择线之前。

http://word.tips.net/T000120_Jumping_to_the_Start_or_End_of_a_Document.html