Excel Word Макросы: Вставить из буфера в Word

Автор jfd, 05 апреля 2016, 10:52

jfd

Добрый день, никак не удается вставить из буфера картинку в ячейку word-таблицы. В буфер картинка попала при выполнении макроса в Excel.
Использование макроредактора дает такой метод вставки содержимого буфера - PasteAndFormat (wdPasteDefault), но почему-то не работает.
Подскажите в чем дело может быть?


Администратор

А если без макроса вставлять, например, сочетанием клавиш Ctrl + V, то вставляется картинка?

jfd

Да вставляется картинка.
Причем выделить нужную word-ячейку получается, а вставить в нее нет:

Set WA = CreateObject("Word.Application")
Set WD = WA.Documents.Open(wb.Path & xxxx.docx")

WD.Tables(1).Cell(1, 1).Select


Администратор


jfd

Если это принципиальный момент то да, но картинка в буфере, но она там может оказаться как результат того же PrintScreen'а.

Администратор

Напишите строку кода, которую вы используете, чтобы вставить в ворд.

Администратор

Я скопировал в экселе рисунок вручную (Ctrl + C). Затем я перешёл в ворд и там вставил рисунок таким кодом:
Sub Макрос1()
    Selection.PasteAndFormat (wdFormatOriginalFormatting)
End Sub

Можете проделать такие же действия? Получилось у вас вставить?

jfd

Да, получилось вставить, как вы описали.

Я вот так пишу макрос по вставке:
WD.Tables(1).Cell(1, 1).Select

И варианты:
WD.Selection.PasteAndFormat (wdPasteDefault)
WD.ActiveDocument.Selection.PasteAndFormat (wdPasteDefault)
WD.ThisDocument.Selection.PasteAndFormat (wdPasteDefault)
WA.ActiveDocument.Selection.PasteAndFormat (wdPasteDefault)
WA.ThisDocument.Selection.PasteAndFormat (wdPasteDefault)




Администратор

Вариант без выделения. Код написан для использования в самом ворде, а не в экселе. Если вам нужно именно с выделением, то тогда нужно будет подумать, что сделать, но пока я считаю, что выделение нет смысла использовать.
Sub Макрос2()
    Dim doc As Document
    Set doc = ActiveDocument
    doc.Tables(1).Cell(1, 1).Range.PasteAndFormat wdPasteDefault
End Sub

Что касается вашего кода. WD у вас это объект "Word.Document". У объекта "Document" нет членов "Selection", "ActiveDocument" и "ThisDocument" поэтому ваши коды неправильные.

Прежде, чем делать код в экселе для ворд, сначала сделайте работающий код в самом ворде, а затем уже адаптируйте к экселю. Если бы вы стали делать код в ворде и ставили точку, то видели бы, что у Document нет таких членов.


jfd

Вот WD.Tables(1).Cell(1, 1).Range.PasteAndFormat wdPasteDefault это сработало.
Спасибо!