Макрос VBA для вставки диаграммы из Excel в Word и форматирования с переносом текста - PullRequest
0 голосов
/ 13 сентября 2018

В моем документе 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 делает только 1007 * или wdInLine для размещения, и ни одна из них не решает эту проблему,

Я очень новичок в VBA и у меня кончились идеи.Я все еще пытаюсь найти способ отформатировать его, возможно, используя какое-то выражение WITH.Однако я думал, что попытаюсь обратиться за помощью, продолжая google-foo и изучая VBA на Youtube.

Использование PasteAndFormat Type:=wdChartPicture связывает диаграмму с превосходством.Так что это не сработало.

1 Ответ

0 голосов
/ 13 сентября 2018

Убедитесь, что у вас есть ссылка на приложение Word в вашем VBE, затем сразу же после обычной вставки (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 не перестает меня удивлять. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...