Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Excel单元格的图片保存到Word文档中_Excel_Vba_Ms Word - Fatal编程技术网

将Excel单元格的图片保存到Word文档中

将Excel单元格的图片保存到Word文档中,excel,vba,ms-word,Excel,Vba,Ms Word,我的代码粘贴了一张单元格的图片 然后,它应该粘贴不适合第一页的其他单元格 “第二页”的图片无法粘贴 Dim wdApp As Object Dim wd As Object Dim sFil As String On Error Resume Next Set wdApp = GetObject(, "Word.Application") If Err.Number <> 0 Then Set wdApp = CreateObject("Word.Application") O

我的代码粘贴了一张单元格的图片

然后,它应该粘贴不适合第一页的其他单元格

“第二页”的图片无法粘贴

Dim wdApp As Object
Dim wd As Object
Dim sFil As String

On Error Resume Next
Set wdApp = GetObject(, "Word.Application")

If Err.Number <> 0 Then Set wdApp = CreateObject("Word.Application")

On Error GoTo 0
Set wd = wdApp.Documents.Add  ' create a new document
wdApp.Visible = True
'change sheet and range below
ActiveSheet.Range("a1:z43").CopyPicture xlPrinter
wd.Range.Paste
wdApp.ActiveDocument.Range(0, 0).InsertBreak Type:=wdSectionBreakNextPage
wdApp.ActiveDocument.Sections (2)
ActiveSheet.Range("a43:z76").CopyPicture xlPicture
wd.Range.Paste

'wd.SaveAs Filename:="I:\'Files\RKG-COMMS\" & URNa & " - " & URNb & ".doc"
'wd.Close
'wd.Quit
Dim wdApp作为对象
作为对象的Dim wd
将sFil设置为字符串
出错时继续下一步
Set wdApp=GetObject(,“Word.Application”)
如果错误号为0,则设置wdApp=CreateObject(“Word.Application”)
错误转到0
设置wd=wdApp.Documents.Add“创建新文档”
wdApp.Visible=True
'更改下面的工作表和范围
ActiveSheet.Range(“a1:z43”).CopyPicture xlPrinter
wd.Range.Paste
wdApp.ActiveDocument.Range(0,0).插入中断类型:=wdSectionBreakNextPage
wdApp.ActiveDocument.Sections(2)
ActiveSheet.Range(“a43:z76”).CopyPicture xlPicture
wd.Range.Paste
'wd.SaveAs Filename:=“I:\'Files\RKG-COMMS\”&URNa&“-”&URNb&“.doc”
“关了
“退出
以下是结果-仅第一页

这是应该粘贴的第二页

我很难测试你在做什么,但从逻辑上讲,我相信下面的方法应该有效,尽管可能有一个问题(请继续阅读)

请注意此代码如何使用单词
Range
对象作为新内容的目标。粘贴后,不确定
docRange
是在粘贴内容之前,还是包含粘贴内容。如果它包含粘贴的内容,代码应该可以工作。如果它在粘贴内容之前,那么下一张图片将在第一张图片之前出现。在这种情况下,在
docRange.Paste
之后立即重复行
Set docRange=wd.Content

    Set wd = wdApp.Documents.Add  ' create a new document
    Dim docRange as Object 'Word.Range
    Set docRange = wd.Content
    wdApp.Visible = True
    'change sheet and range below
    ActiveSheet.Range("a1:z43").CopyPicture xlPrinter
    docRange.Paste
    'Go to the end
    docRange.Collapse 0 'wdCollapseEnd
    docRange.InsertBreak Type:=wdSectionBreakNextPage
    ActiveSheet.Range("a43:z76").CopyPicture xlPicture
    docRange.Paste
针对评论中关于代码如何详细工作的询问:

Dim docRange as Object 'Word.Range
声明一个对象变量以保存代码使用的文档部分。因为问题中的代码从Excel运行,显然使用了后期绑定(没有对Word对象库的引用),所以它被声明为
对象

如果使用了早期绑定(代码项目引用了libraray一词),那么最好将其声明为Word.Range。为了完整起见,我将Word对象数据类型(
Word.Range
)包括在内,以便能够在帮助中研究对象及其属性

Set docRange = wd.Content
这将实例化
Word.Range
对象,以包含文档的整个主体(
wd
在目标Word文档的问题代码中实例化)

粘贴后,
docRange
仍然指文档的全部内容,包括粘贴的内容。如果要立即执行分段和第二次粘贴操作,则会删除范围的内容。(想象一下,就像在Word中选择文本,然后键入:所选内容将替换为所键入的内容。为了避免这种情况,在键入之前按向右箭头键,以便新内容跟随所选内容。)


因此,范围是“折叠的”(如按箭头键)。然后插入分节符并执行下一个粘贴操作。

看起来您使用的是后期绑定Word,而不是Option Explicit,这意味着您有一些空变量,您不知道这些变量是空的,因为您认为它们是Word常量:),而没有对Word库的引用,您需要声明并分配任何所需的常量,如
wdSectionBreakNextPage
。否则,它们是空的变体。您能提供实际结果和所需结果的屏幕截图吗?请确保已启用非打印字符的显示。然后我们可以确定你想要什么。我想我从文本中理解了它(见我的编辑),但它不确定。。。您没有收到任何错误,对吗?@DavidZemens不幸的是,我正确地引用了它:(@Cindymister抱歉,我是stack的新手,一般来说是VBA的新手,希望您能在我的编辑和哪个部分中看到结果)这两个页面中有一个是从Excel粘贴为图片的?然后是整个页面的内容?将docRange变暗为Object'Word.Range Set docRange=wd.content-这些行的作用是什么?然后是为什么我需要重新指定对象来粘贴页面的第二部分