2016-04-20 6 views
1

Я пытаюсь скопировать диапазон из Ezcel в Word и вставить его в качестве изображения.Запуск макросов после потери фокуса

Моя установка в настоящее время:

  • WORD запускает макрос, который создает объект Excel и открывает Workbook1.xlsm
  • WORD вызывает макрос на Workbook1.xlsm
  • макросоци- копирует диапазон на в буфер обмена.
  • WORD затем вставляет буфер в качестве изображения.

После вставки в WORD я больше не могу вызывать макросы в ссылочном документе xl. Мой код, который живет в макросе WORD VBA:

Dim xl As Object 
Set xl = CreateObject("Excel.Application") 
xl.Workbooks.Open ("\\path\to\DESKTOP\qrap\xlsHelper.xlsm") 

For i = 0 To 10 
    xl.Run "copy", "\\path\to\DESKTOP\qrap\stukken\2003 2015-2 financieel.xls" 

    Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _ 
     Placement:=wdInLine, DisplayAsIcon:=False 
Next 

xl.ActiveWorkbook.Close (False) 
xl.Quit 
Set xl = Nothing 

На второй итерации, линия xl.Run ... бросает Runtime Error 1004: Macro cannot be executed. Работает нормально в первый раз. Хорошо работает, если я не переключусь на WORD.

Как перефокусировать Excel, чтобы макрос мог работать правильно?

Кроме того, copy макрос в файле Excel заключается в следующем:

Dim oWb As Workbook 

Public Sub copy(filename As String) 
    If Not (oWb Is Nothing) Then 
     oWb.Close 
     Set oWb = Nothing 
    End If 

    Set oWb = Workbooks.Open(filename) 
    ActiveCell.CurrentRegion.Select 
    Selection.copy 
End Sub 
+0

Как выглядит код 'copy'? – Rory

+0

@Rory добавил код для Excel Macro. – steenbergh

ответ

2

Я подозреваю, что вы остаться с книгой открытым. Убедитесь, что в фоновом режиме нет экземпляров Excel, а затем измените код на:

Dim xl      As Object 
Dim wb      As Object 
Set xl = CreateObject("Excel.Application") 
xl.Workbooks.Open "\\path\to\DESKTOP\qrap\xlsHelper.xlsm" 

For i = 0 To 10 
    xl.Run "xlsHelper.xlsm!copy", "\\path\to\DESKTOP\qrap\stukken\2003 2015-2 financieel.xls" 

    Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _ 
          Placement:=wdInLine, DisplayAsIcon:=False 
Next 

xl.Activeworkbook.Close False 
xl.Quit 

и попробуйте это.

+0

Это дает тот же результат; закрытие книг не проблема. На самом деле, мне нужен этот, чтобы оставаться открытым и открывать для меня другие книги. Кроме того, если это была проблема, excel-macro выведет ошибку, а не WORD. – steenbergh

+0

Я внес одну поправку в код - можете ли вы повторить проверку? – Rory

+0

Вот и все! Работает как шарм! - Теперь я могу видеть логику моей ошибки, и получить представление об этих вещах всегда лучше, чем копировать/вставлять код. Thnx – steenbergh