excel - VBA 宏将图表从 Excel 粘贴到 Word 中,并使用文本换行设置格式
问题描述
在我的 excel 文档中,我有一个图表,我想将其复制并粘贴到 MS-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
唯一的问题是图像被粘贴为“与文本对齐”,但我需要它是“带文本环绕的正方形”。我无法让 Word 或 Excel 记录将图像更改为“带文字环绕的正方形”。
该PasteSpecial
零件仅用于放置wdFloatOverText
或wdInLine
放置,它们都不能解决此问题。
我对 VBA 很陌生,并且已经没有想法了。我仍在尝试找到一种格式化它的方法,也许使用某种WITH
声明。但是,我想在继续 google-foo 并从 Youtube 学习 VBA 的同时尝试寻求帮助。
使用PasteAndFormat Type:=wdChartPicture
将图表链接到 Excel。所以那没有用。
解决方案
确保您在 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 方法,则活动插入点位于被粘贴对象的开头。为什么?我不知道!Word VBA 从未停止让我惊讶。:-)
推荐阅读
- spring - SpringBoot 测试失败,“没有名为 'webHandler' 的 bean 可用”
- java - 使用java反转数组
- python - 使用 PyPy 构建 Python 文件
- javascript - 有人可以向我解释一下这个 JS 函数吗?
- android - 深层链接在 Android 中不再起作用
- python-3.x - 试图以某种方式遍历列表,跳过一个元素
- json - 如何忽略 JSON 解析回数据中的某些对象?
- python - Docker 中的 ModuleNotFoundError
- r - ggplot y轴 - 将计数突变为百分比
- c# - 如何处理“405 错误,不允许的方法”。无一例外