VBA宏可将图表从Excel粘贴到Word中,并使用文本包装进行格式化

时间:2018-09-13 18:03:02

标签: excel vba ms-word

在我的excel文档中,有一张图表,我想将其复制并粘贴到MS-Word文档中。我想避免链接数据,嵌入工作簿和调整大小(Excel将图表格式化为我想要的大小)。所以我想出/找到了几乎可以正常工作的以下代码:

library(purrr)
index <- unique(sort(unlist(map(index, function(x) seq(x - 10, x + 10)))))

唯一的问题是图像被粘贴为“与文本一致”,但是我需要它为“带文本环绕的正方形”。我无法让Word或Excel记录更改图像为“带文本换行的正方形”的记录。

Sub PasteChart() Dim wd As Object Dim ObjDoc As Object Dim FilePath As String Dim FileName As String FilePath = "C:\Users\name\Desktop" FileName = "Template.docx" 'check if template document is open in Word, otherwise open it On Error Resume Next Set wd = GetObject(, "Word.Application") If wd Is Nothing Then Set wd = CreateObject("Word.Application") Set ObjDoc = wd.Documents.Open(FilePath & "\" & FileName) Else On Error GoTo notOpen Set ObjDoc = wd.Documents(FileName) GoTo OpenAlready notOpen: Set ObjDoc = wd.Documents.Open(FilePath & "\" & FileName) End If OpenAlready: On Error GoTo 0 'find Bookmark in template doc wd.Visible = True ObjDoc.Bookmarks("LPPU").Select 'copy chart from Excel Sheets("Group Level Graphs").ChartObjects("Chart 1").Chart.ChartArea.Copy 'insert chart to Bookmark in template doc wd.Selection.PasteSpecial Link:=False, DataType:=14, Placement:=0, _ DisplayAsIcon:=False End Sub 部分仅对PasteSpecialwdFloatOverText进行放置,但它们都不能解决此问题。

我对VBA还是很陌生,已经没有想法了。我仍在尝试寻找一种格式化它的方法,也许使用某种wdInLine语句。但是,我以为在继续google-foo并从Youtube学习VBA的过程中会尝试寻求帮助。

使用WITH将图表链接到excel。所以那没用。

1 个答案:

答案 0 :(得分:0)

确保在VBE中具有对Word应用程序的引用,然后立即执行常规粘贴(wd.Selection.Paste),添加以下两行代码:

wd.Selection.MoveStart word.WdUnits.wdCharacter, Count:=-1
wd.Selection.InlineShapes(1).ConvertToShape.WrapFormat.Type = wdWrapSquare

如果要继续使用代码中具有的PasteSpecial方法,则将“ wd.Selection.MoveStart ...”上方的代码行替换为:

wd.Selection.MoveEnd word.WdUnits.wdCharacter, Count:=1

原因是常规粘贴将活动的插入点留在了插入对象的末端。但是,如果使用PasteSpecial方法,则活动插入点位于粘贴对象的开头。为什么?我不知道! VBA一词永远不会令我惊讶。 :-)