【问题标题】:Paste Excel chart in word, VBA将 Excel 图表粘贴到 word、VBA 中
【发布时间】:2013-07-24 16:56:37
【问题描述】:

我使用的是 Windows XP SP 3。我已经编写了将多个图表从 Excel 2003 粘贴到 Word 2003 的代码。

Dim word As Object
Dim doc As Object
On Error Resume Next

Set word = GetObject(, "word.application") 'gives error 429 if Word is not open
If Err = 429 Then
    Set word = CreateObject("word.application") 'creates a Word application
    Err.Clear
End If

With word
    .Visible = True
    .Documents.Add
End With

Sheets("Data").Select

For i = 1 To 2
    ActiveSheet.ChartObjects(i).Activate
    ActiveChart.ChartArea.Copy
    With word.Selection
        'Paste Chart
        .Range.PasteSpecial
    End With
Next i

我想了解,如何将 Excel 2003 中的图表放入创建的 word 文件中的不同位置?前任。我想按以下顺序放置 4 个图表:第一个图表对齐到文档的左端(不是段落),第二个图表对齐到文档的左侧,3d 位于第一个下方,对于第四。

感谢您的回答!

UPD:基于有用的 cmets,我为我的问题概述了以下解决方案。创建模板文件并在其中插入一个名为insertHere 的书签。在此文件中使用 Excel VBA 进行更改。

这是代码

Sub macro()
Dim word As Object
On Error Resume Next

Set word = GetObject(, "word.application") 'gives error 429 if Word is not open
If Err = 429 Then
    Set word = CreateObject("word.application") 'creates a Word application
    Err.Clear
End If

Set templateFile = word.documents.Add(Template:="C:\Users\PC\Desktop\Doc4.dot")
Sheets("Data").Select

ActiveSheet.ChartObjects(1).Activate 
ActiveSheet.ChartObject(1).Select
ActiveChart.ChartArea.Copy
With templateFile.Bookmarks
    .Item("insertHere").Range.Paste
End With
End Sub

但是,此代码不会插入图表。你能告诉我为什么吗?

【问题讨论】:

    标签: vba ms-word excel-2003


    【解决方案1】:

    最简单的方法是在 Word 中为您希望将图表粘贴到的位置定义 Bookmarks。在 Word 2003 中,如果我没记错的话,该选项位于“插入”菜单、“书签”上。首先定位光标,插入,书签(Ctrl-Shift-F5)给它一个名称,例如bkChart1(不带空格)。那么:

    word.ActiveDocument.Bookmarks("bkChart1").Range.PasteAndFormat
    ' there are other Paste methods, or PasteSpecial
    

    如果您喜欢使用代码格式化文档和粘贴的对象,那么您最好在 Word 中记录一些宏。它不会创建完美的代码,但会帮助您发现所需的方法和属性。

    【讨论】:

    • 应该是 ChartObjects(1),而不是 ChartObject。并仔细检查模板是否仍然包含书签 - 在修改模板时它很容易消失。
    • 它有效。但是,有一个非常奇怪的行为:当打开模板文件时,宏会插入书签所在的所有内容。如果模板文件没有打开,那么什么都不会发生。我认为这种行为的原因在于我如何创建 MS Word 实例 - Set word = GetObject(, "word.application") 'gives error 429 if Word is not open If Err = 429 Then Set word = CreateObject("word.application") 'creates a Word application Err.Clear End If
    • 把它关掉再打开 :)。使用您的模板在 Word 中(手动)创建一个新文档,并检查书签是否到位。我目前不确定是什么导致了您的问题,因此需要进行一些调查。
    • 你应该学会调试你的代码。通过按 F9 在一行上创建一个断点,按 F8 等单步执行代码。然后删除 On Error Resume Next - 在没有这个的情况下先让它工作 - 你需要查看所有错误。
    猜你喜欢
    • 2019-11-03
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多