我目前正在通过宏将很多图表从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
命令Tables.Add
在上一个表中完成 我的问题:
如何在不必手动单步执行宏的情况下使其工作?
使用Windows XP,Excel 2007(12.0.65.62.5003)。请注意,该问题在Windows 7上的行为不同(未在Windows Vista上测试)。
答案 0 :(得分:1)
似乎最后一行并不总是离开我插入的表格。我替换了以下行:
WordApplication.Selection.MoveDown Unit:=wdLine, Count:=2
用这个
Do Until Not WordApplication.Selection.Information(wdWithInTable)
WordApplication.Selection.MoveRight Unit:=wdCharacter, Count:=1
Loop
现在它可以正常工作