2015-06-05 2 views
3

Я поддерживаю приложение Access, которое было в производстве уже много лет, а часть автоматизации Excel перестала работать с обновлением и преобразованием Office 2013 с .mdb на .accdb.Access 2013 VBA автоматизирует Excel, теряющий окна

Базы данных Access содержат ссылку на библиотеку объектов Microsoft Excel 15.0.

объекты

первенствовать объявлены:

Public objXLApp As Excel.Application  
Public objXLBook As Excel.Workbook  

и установить:

Set objXLBook = GetObject(strReportPath & strTitle & ".xls") 
DoEvents 
Set objXLApp = objXLBook.Parent 

и в этот момент, objXLApp.visible = ложь. Также, objXLApp.Windows.Count = 1, что является правильным. Если в ближайшем окне я установил objXLApp.visible = true, то я потерял свои окна: objXLApp.Windows.Count = 0, а ссылки на ожидаемое окно возвращают ошибку «Недопустимый интервал».

Выполнение его из файла .mdb приводит к такому же поведению.

Любые идеи?


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

HansUp, я могу попробовать ваше предложение. Можете ли вы опубликовать пример? Если это сработает, я отвечу правильно.

Gene, Да, исходные файлы находятся в формате .xls, они не были обновлены до .xlsx.

Коминтерн, код прекращает выполнение в последней строке кода, затем я использую непосредственное окно для проверки значений и изменения свойства видимости и проверки значений снова.


HansUp, который исправил его. Я изменил код на:

Set objXLApp = New Excel.Application 
DoEvents 
Set objXLBook = objXLApp.Workbooks.Open(strReportPath & strTitle & ".xls") 

Если вы разместите ответ, я помету ваше как правильно.

Теперь я просто изменить его везде в коде ...

+0

Есть ли причина, по которой код использует раннее связывание, но открытие рабочей книги, как если бы оно было поздно? – Comintern

+0

Работает ли он правильно, если вы сначала установите 'objXLApp' напрямую, а затем используете его метод« WorkBooks.Open », чтобы открыть файл? – HansUp

+0

Если вы используете офис 2013, ваши листы Excel «.xls» или «xlsx»? – Gene

ответ

3

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

Set objXLApp = New Excel.Application 
Set objXLBook = objXLApp.Workbooks.Open(strReportPath & strTitle & ".xls") 

Между тем, вы тестировали такой подход и нашел, что это сработало. Тем не менее, я не уверен, что это окончательное решение, потому что ваши переменные объекта находятся в области видимости на уровне модуля ...

Public objXLApp As Excel.Application  
Public objXLBook As Excel.Workbook 

Если будет вызывать код несколько раз, вы можете закончить изменения этих ссылок на объекты, когда они могут по-прежнему нуждаться в других местах. С другой стороны, если вы никогда не будете запускать код повторно, я не вижу причин заботиться о objXLApp.Windows.Count.

Я просто не знаю, что может произойти здесь; Я избегаю глобальных переменных.

+1

Да, я тоже их избегаю, но хотел свести к минимуму изменения. Я добавил глобальный публичный юг, чтобы обернуть 2 строки кода и изменить остальные 16 ссылок. Пользователи знакомы с ошибками, если они повторно запускают отчет, они должны закрыть один экземпляр перед открытием другого. Это может быть то, о чем вы говорите, но я буду ждать их, чтобы спросить, прежде чем делать больше изменений. btw, переменные объекта охвачены на глобальном уровне. – Beth

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