СтрокаСоединения = "
| Provider=Microsoft.ACE.OLEDB.12.0;Data Source="""+СокрЛП(ИмяФайла)+""";
| Extended Properties=""Excel 12.0 Xml;HDR=NO;ReadOnly=1""";
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.Open(СтрокаСоединения);
SchemaTables = 20;
RecordsetTables = Соединение.OpenSchema(SchemaTables);
й = 1;
ЛистНайден = Ложь;
Пока НЕ RecordsetTables.Eof() Цикл
Лист = RecordsetTables.Fields("TABLE_NAME").Value;
Если й=НомерЛиста Тогда
ЛистНайден = Истина;
Прервать;
КонецЕсли;
RecordsetTables.MoveNext();
й = й+1;
КонецЦикла;
RecordsetTables.Close();
Если Не ЛистНайден Тогда
ВызватьИсключение "Лист не найден!";
КонецЕсли;
Записи = Новый COMОбъект("ADODB.Recordset");
ТекстЗапроса = "SELECT * FROM ["+Лист+"]";
Записи.Open(ТекстЗапроса, Соединение);
МассивДанных = Записи.GetRows().UnLoad();
Записи.Close();
Соединение.Close(); //<---------------------ВОТ ЗДЕСЬ! до 75% времени в замере работы обработки (но не всегда)
Соединение = Неопределено;
(0) Пушо, ADO, оно по умолчанию своеобразно в пул пытается, не находя при этом понимания нижлежащего "Microsoft.ACE.OLEDB". Получай набор записей как результат ".Execute", и дай ему возможность пожить своей жизнью после выхода переменных из области видимости, без всяких там "= Неопределено"
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс