2013-05-06 3 views
3

Хорошо, я создаю документ Word (на основе шаблона) из MS Access и обновляю несколько диаграмм с помощью объекта OLEFormat. После того, как я .Activate объекта, который создает новый экземпляр Excel и сделать мои изменения, я закрываю этот экземпляр Excel с:Как закрыть ТОЛЬКО экземпляр Excel, открытый OLEFormat.Activate

wdChart.ChartData.Workbook.Application.Quit 

Это прекрасно работает, если нет других экземпляров Excel работает. Но если есть открытый экземпляр Excel, когда происходит OLEFormat.Activate, он не создает новый экземпляр Excel, а открывает таблицу диаграмм в том же экземпляре Excel, который открыт. Поэтому, когда я выполняю команду .Application.Quit, он закрывает все открытые книги в этом экземпляре и предлагает мне сохранить книгу. На данный момент, я получаю сообщение Слова, которое говорит:

Чтобы вставить таблицу, необходимо сначала закрыть все открытые диалоговые окна или отмены режима редактирования в Microsoft Excel

мой код не с а:

Метод 'Activate' объекта 'ChartData' не удалось

Я думаю, что эти ошибки ч ave, чтобы сделать с тем, что мой код последовательно редактирует несколько диаграмм. Когда открывается диалоговое окно Word, мой код все еще пытается запустить или что-то в этом роде.

Я думаю, что бы решить все это, если есть способ заставить OLEFormat.Activate открыть собственный экземпляр Excel. Это возможно?

ответ

1

Чтобы проверить, открыто ли более 1 книги, вам необходимо проверить. Если да, то закройте книгу диаграмм, иначе выйдите из приложения.

If wdChart.ChartData.Workbook.Application.Workbooks.Count > 1 Then 
    wdChart.ChartData.Workbook.Close saveChanges:=False 
Else 
    wdChart.ChartData.Workbook.Application.Quit 
End If 
+0

Ах! Я искал вариант «Закрыть», но искал члена «Приложения», а не «Рабочую книгу». Спасибо. – MultiGuy

1

У меня была аналогичная проблема с этим и с «AddChart», по какой-то причине в Office 2010 (не 2013 или 2016), иногда при доступе несколько графиков в строке окна Excel не закрывает перед тем другой открывается. Это вызывает ошибку, с которой столкнулся @MultiGuy.

я в моем случае я просто добавил небольшое время ожидания перед моим и «AddChart» звонки «Активировать» и это, кажется, решен вопрос:

Excel.Application.Wait Now + TimeValue("0:00:01") 

Долгосрочное я, вероятно, следует написать какой-то функции, которая ждет, пока соответствующее окно Excel не будет закрыто, но пока я думаю, что этот более хрупкий подход будет работать в большинстве сценариев.

Смежные вопросы