Страницы: 1
RSS
Доступ к защищенной книге через ado
 
Добрый день, нужно организовать доступ к книге excel, защищенной пользовательским паролем.
excel 2013
Доступ организуется через ADO
делаю так
Код
Dim con_exc As New ADODB.Connection
Dim rst_exc As New ADODB.Recordset



'подключение к ексел
con_exc.Provider = "Microsoft.ACE.OLEDB.12.0"
con_exc.ConnectionString = "Data Source=" & ThisWorkbook.Path & "\база_пароль.xlsx" & _
                        ";Password=111;User ID=Admin;Extended Properties=""Excel 12.0 Macro;HDR=YES"""


con_exc.CursorLocation = adUseClient
con_exc.Open
rst_exc.Open "Select Код from [Лист1$]", con_exc

Debug.Print rst_exc.RecordCount

   rst_exc.Close
   con_exc.Close
 
При открытии соединения появляется ошибка
"Не удается запустить приложение. Системная база данных отсутствует или открыта с монопольным доступом другим пользователем"

Если обращаться к книге без пароля (убрав строки  (;Password=111;User ID=Admin) все работает
 
ADO не нацелен на открытие книг Excel, защищенных паролем на открытие. Соединение с паролем и пользователем доступно только для баз данных, насколько я помню.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Неужели все так плохо?! Медицина здесь бессильна?
Может есть какой-то другой выход? Снять пароль, открыть, вернуть пароль.
Изменено: ruslan_sul - 14.02.2018 14:05:03
 
Если перед этим защищенную книгу получить через GetObjeсt, то доступ даст, если есть пароль - запросит.
Excel + SQL = Activetables
 
Цитата
ruslan_sul написал:
Снять пароль, открыть
в этом случае не через ADO открываете сначала, подключаетесь, делаете нужные манипуляции и закрываете. Но тогда не вижу смысла в использовании ADO...Что-то вроде:
Код
Dim con_exc As New ADODB.ConnectionDim rst_exc As New ADODB.Recordset
dim wb as workbook
Set wb = Application.Workbooks.Open(ThisWorkbook.Path & "\база_пароль.xlsx",Password:="111")
'подключение к ексел
con_exc.Provider = "Microsoft.ACE.OLEDB.12.0"
con_exc.ConnectionString = "Data Source=" & ThisWorkbook.Path & "\база_пароль.xlsx" & _
                        ";Extended Properties=""Excel 12.0 Macro;HDR=YES"""
 
 
con_exc.CursorLocation = adUseClient
con_exc.Open
rst_exc.Open "Select Код from [Лист1$]", con_exc
 
Debug.Print rst_exc.RecordCount
 
   rst_exc.Close
   con_exc.Close
wb.close
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
спасибо, так работает.
Раз уж разговор зашел о смысле использования ADO...
Ранее работал только в Acces, поэтому ADO привычнее.
Как на Ваш взгляд, насколько разумно вообще для обработки данных Excel использовать ADO?
 
Смотря что делать. Если книга открывается и надо изменить данные листов или получить их - смысла в ADO нет, это можно сделать напрямую из Excel.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Доброе время суток.
Цитата
ruslan_sul написал:
насколько разумно вообще для обработки данных Excel использовать ADO
Какой offtop-ный вопрос :)  Для начала хотелось бы получить информацию - что подразумевается под словом обработка?
Цитата
ruslan_sul написал:
Ранее работал только в Acces
Так и сейчас можно продолжать. Установить Access Runtime, если Access не установлен и вперёд.
 
прекрасно понимаю размытость вопроса.
Сейчас пока стоит простая задача
открыть книгу 1
открыть книгу 2
В книге 2 найти записи по уникальному коду из книги 1 и скопировать найденные записи в книгу3
Мне как человеку без опыта программирования в Excel пришла мысль реализовать это через SQL .
Понимаю что решить конкретно эту задачу можно и другими способами очевидными в Excel  (фильтр например).
Тогда вопрос более конкретный,

При каких объемах (количество записей) в таблицах excel (для решения выше описанной задачи) разумно использовать ADO?
 
По этому конкретному примеру, можно, при условии плоских таблиц, сделать выборку и при помощи SQL, и даже не прибегая к программированию, просто написав запрос в файле подключения.
Страницы: 1
Наверх