将图表从excel复制到单词 - 不确定行为

时间:2011-10-25 09:00:25

标签: vba ms-word copy-paste

我目前正在通过宏将很多图表从excel复制到word。我使用Record Macro功能帮助我生成以下代码:

Set charts = Sheets("Charts").ChartObjects
For Each chart In charts
    WordApplication.Selection.TypeParagraph
    WordApplication.ActiveDocument.Tables.Add Range:=WordApplication.Selection.Range, NumRows:=2, NumColumns:= _
        1, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
        wdAutoFitFixed
    With WordApplication.Selection.Tables(1)
        If .Style <> "Table Grid" Then
            .Style = "Table Grid"
        End If
        .ApplyStyleHeadingRows = True
        .ApplyStyleLastRow = False
        .ApplyStyleFirstColumn = True
        .ApplyStyleLastColumn = False
        .ApplyStyleRowBands = True
        .ApplyStyleColumnBands = False
    End With
    WordApplication.Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    chart.Copy
    WordApplication.Selection.Paste


    WordApplication.Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    ' configure the shape (resizing)
    WordApplication.Selection.MoveDown Unit:=wdLine, Count:=2
Next

所以我做的是,放一个Return,添加一个包含2行的表并将第一行对齐到Center。然后通过从Excel复制并将其粘贴到Word中来添加图表。通过选择(通过MoveLeft命令)对形状进行修补(删除),最后向下移动2步(离开表格)并重做所有图表。

如果我通过F8逐步完成此操作,我会得到我想要的结果。但是,如果我让它运行,我会一直看到不同的结果,例如:

  • 即使在MoveDown命令
  • 之后,选择仍保留在表格中
  • MoveDown命令
  • 之后仍然选择了形状
  • 运行时错误'4605':此方法或属性不可用,因为对象引用表行的结尾(由于选择未被移动而Tables.Add在上一个表中完成
  • 正确的结果

我的问题:
如何在不必手动单步执行宏的情况下使其工作?

使用Windows XP,Excel 2007(12.0.65.62.5003)。请注意,该问题在Windows 7上的行为不同(未在Windows Vista上测试)。

1 个答案:

答案 0 :(得分:1)

似乎最后一行并不总是离开我插入的表格。我替换了以下行:

WordApplication.Selection.MoveDown Unit:=wdLine, Count:=2

用这个

Do Until Not WordApplication.Selection.Information(wdWithInTable)
    WordApplication.Selection.MoveRight Unit:=wdCharacter, Count:=1
Loop

现在它可以正常工作