2013-05-15 6 views
0

У меня есть проблемы со следующим кодом:закрытие Vba первенствует приложения/рабочие книги замерзает

Dim excelapp as object 
set excelapp = CreateObject("excel.application") 
dim ws as object 
dim wb as Workbook 

wb= excelapp.Workbooks.Open(path) 
ws= wb.Sheets(1) 
'in the code i send the worksheet object around by reference in order to read the 
'worksheet and manipulate data, i dont create other instances of excel apps or 
'workbooks 

тогда я попробовать:

wb.Close 

и я также пытался:

excelapp.Quit 

Ни один из них не работал, они оба замораживают и говорят, что ожидают действия OLE, и у меня есть несколько процессов excel, если я их не называю, когда i попробуйте открыть файлы excel, которые я открыл с помощью кода, я могу только открыть их только для чтения, потому что theyre проверил меня.

Я также попытался выполнить сценарий оболочки, который закрывает все приложения «Excel.Exe», но он закрывает ... фактический файл excel, где выполняется vba, поэтому это не очень хорошее решение. Спасибо заранее.

+0

Вы управляете этим преимуществом? Если «Да», нет необходимости создавать дополнительный экземпляр Excel для открытия другой книги. –

+0

Хорошо, так какой из объектов я бы использовал? Я попробовал APPLICATION, но он открывает фактические листы excel, и когда я пытаюсь использовать application.visible = false, листок, связанный с моим методом, становится невидимым. я решил это, поставив application.visible = true после, но он просто выглядит неряшливо, правильно ли? Спасибо! –

+0

Перед открытием книги вы можете установить 'Application.ScreenUpdating = False', а затем вернуться к True, когда закончите. –

ответ

1

Возможно, приложение Excel обнаружило, что рабочая книга изменилась, и создает диалоговое окно (которое невидимо, потому что приложение не видно). Попытка:

wb.Close False 

Что говорит Excel игнорировать любые изменения в книге.

+0

гениальный! я старался, я предполагал, так как он сказал, что он ждет действия OLE, что он мог бы быть чем-то вроде ответа пользователя, но я понятия не имел, чтобы приложение игнорировало его, плохо попробуйте! спасибо –

+1

Обычно стоит сделать excelapp.visible = true, пока вы отлаживаете вещь - жизнь становится намного проще. Кроме того, определите excelapp как Excel.Application, а затем установите excelapp = новый Excel.Application. Должно сделать кодирование немного легче из-за intellitype. – steveo40

+0

Я сделал это, и ошибка остановилась. Спасибо! –

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