在我的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
部分仅对PasteSpecial
或wdFloatOverText
进行放置,但它们都不能解决此问题。
我对VBA还是很陌生,已经没有想法了。我仍在尝试寻找一种格式化它的方法,也许使用某种wdInLine
语句。但是,我以为在继续google-foo并从Youtube学习VBA的过程中会尝试寻求帮助。
使用WITH
将图表链接到excel。所以那没用。
答案 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一词永远不会令我惊讶。 :-)