powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel 2010, сводка по данным из другой книги
16 сообщений из 16, страница 1 из 1
Excel 2010, сводка по данным из другой книги
    #38234312
Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Возникла такая задача. Есть книга (data.xlsx), лежащая в сетевой папке, доступной только небольшой группе пользователей (т.к. в ней содержится закрытая информация). Тем не менее, сводка по части данных из этой книги должна быть видна многим. Что пытаюсь для этого сделать - создаю книгу res.xlsx в папке, доступной многим, создаю в ней подключение к data.xlsx в виде сводки. В data.xlsx пишу макрос, который открывает res.xlsx, обновляет в ней сводку (через RefreshAll), сохраняет и закрывает. Вроде бы все замечательно, но когда макрос вызывается при открытой data.xlsx - Excel падает. Если тот же макрос вызывать при закрытой data.xlsx - все замечательно работает. Стал искать причину, создал тестовый пример, долго с ним ковырялся - в какой-то момент внезапно заработало. Возвращаюсь к исходным файлам - снова падает. Стал искать разницу между работающим и неработающим вариантом, и нашел только одно отличие - строка подключения к файлу с данными. В работающем примере она такая:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Provider=Microsoft.ACE.OLEDB.12.0;
User ID=Admin;
Data Source=\\test\\test\test1.xlsx;
Mode=Share Deny Write;
Extended Properties="HDR=YES;";
Jet OLEDB:System database="";
Jet OLEDB:Registry Path="";
Jet OLEDB:Engine Type=35;
Jet OLEDB:Database Locking Mode=0;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False;
Jet OLEDB:Support Complex Data=False;
Jet OLEDB:Bypass UserInfo Validation=False
в неработающем - такая:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Provider=Microsoft.ACE.OLEDB.12.0;
User ID=Admin;
Data Source=\\test\test\test.xlsx;
Mode=Share Deny Write;
Extended Properties="HDR=YES;";
Jet OLEDB:System database="";
Jet OLEDB:Registry Path="";
Jet OLEDB:Engine Type=37;
Jet OLEDB:Database Locking Mode=0;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False;
Jet OLEDB:Support Complex Data=False;
Jet OLEDB:Bypass UserInfo Validation=False
Разница - в параметре Jet OLEDB:Engine Type, в работающем примере он равен 35, в неработающем - 37. Гугление не дало никакой вменяемой информации об этом параметре (понятно, что это тип истоника данных, скорее всего, файлы excel начиная с какой-то версии), попытка в свойствах подключения изменить сроку подключения вручную ни к чему не приводит (восстанавливается значение 37). Подскажите, пожалуйста, можно ли как-то победить эту ситуацию, или, может быть, решить исходную задачу вообще как-то по-другому?
...
Рейтинг: 0 / 0
Excel 2010, сводка по данным из другой книги
    #38234564
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таки в чем проблема - пропишите руками другой вид подключения. этих строк благо уйма. даже сайтик есть
http://www.connectionstrings.com/
...
Рейтинг: 0 / 0
Excel 2010, сводка по данным из другой книги
    #38234941
Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PlanB,

проблема как раз в том, что у меня это не получается. Жму в файле на кнопку "подключения", в вылезшем окошке выбираю нужное, жму на "свойства", в окошке свойств перехожу на вкладку "Определение", меняю строку подключения, жму "ОК", проверяю свойства снова - и вижу, что ничего не изменилось.
...
Рейтинг: 0 / 0
Excel 2010, сводка по данным из другой книги
    #38235018
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slip, пропишите подключение в коде макроса!
...
Рейтинг: 0 / 0
Excel 2010, сводка по данным из другой книги
    #38235052
Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PlanB,

я правильно понимаю, что тогда макрос будет открывать файл со сводкой, менять в нем строку подключения, обновлять и сохранять?
...
Рейтинг: 0 / 0
Excel 2010, сводка по данным из другой книги
    #38235139
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SlipPlanB,

я правильно понимаю, что тогда макрос будет открывать файл со сводкой, менять в нем строку подключения, обновлять и сохранять?вот ссыль на связку excel-access. Сделайте то же самое, только excel-excel прямо в редакторе VBA. там все доступно написано. строку подключения возьмите с connectionstrings.
...
Рейтинг: 0 / 0
Excel 2010, сводка по данным из другой книги
    #38235140
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Excel 2010, сводка по данным из другой книги
    #38235315
Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PlanB,

спасибо, сейчас буду реализовывать этот вариант. Но в нем есть недостаток - придется создавать сводку вручную, из макроса. А если конечный пользователь (а это не я) захочет изменить структуру сводки - придется менять и макрос. Да и вообще хотелось бы понять причину такого странного поведения. Подскажите, куда в этом вопросе копать? В чем может быть дело?
...
Рейтинг: 0 / 0
Excel 2010, сводка по данным из другой книги
    #38235377
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SlipPlanB,

спасибо, сейчас буду реализовывать этот вариант. Но в нем есть недостаток - придется создавать сводку вручную, из макроса. А если конечный пользователь (а это не я) захочет изменить структуру сводки - придется менять и макрос. Да и вообще хотелось бы понять причину такого странного поведения. Подскажите, куда в этом вопросе копать? В чем может быть дело?а изменить структуру запроса пользователем очень просто - храните запрос в ячейке на листе. пользователь сможет ее корректировать по своему усмотрению. правда есть такой момент, что он может туда ввести запрос вида select * from my_table. и вот тогда смысл всей buihs в прятки потеряется и он выгрузит весь файл. с другой стороны, что мешает пользователю сделать то же самое и в редакторе подключения...
...
Рейтинг: 0 / 0
Excel 2010, сводка по данным из другой книги
    #38235415
Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тут же есть 2 типа пользователей - маленькая группа, которая имеет доступ к файлу с данными, и все остальные. Все остальные даже сводку самостоятельно обновить не смогут, т.к. у них нет доступа к файлу с данными. Собственно, для этого и нужен макрос. А пользователь, который может менять структуру сводки - это один из той небольшой группы, у которой есть доступ к файлу с данными. Так что вариант с запросом в ячейке должен бы сработать. Но все равно интересно, из-за чего excel вылетал при обновлении:)
...
Рейтинг: 0 / 0
Excel 2010, сводка по данным из другой книги
    #38235420
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slipтут же есть 2 типа пользователей - маленькая группа, которая имеет доступ к файлу с данными, и все остальные. Все остальные даже сводку самостоятельно обновить не смогут, т.к. у них нет доступа к файлу с данными. Собственно, для этого и нужен макрос. А пользователь, который может менять структуру сводки - это один из той небольшой группы, у которой есть доступ к файлу с данными. Так что вариант с запросом в ячейке должен бы сработать. Но все равно интересно, из-за чего excel вылетал при обновлении:)а вы, простите, сохранялись?
...
Рейтинг: 0 / 0
Excel 2010, сводка по данным из другой книги
    #38235422
Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PlanB,

не понял, это вы к чему?
...
Рейтинг: 0 / 0
Excel 2010, сводка по данным из другой книги
    #38235437
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вы ничего не перепутали в описании (которое я до этого внимательно не читал)? как так макрос вызывается при закрытой книге, в которой находится? у вас не происходит двойного открытия книги? у вас не происходит двойного открытия одного и того же подключения? я считаю, что происходит. закрывайте одно и открывайте новое.

а если лень ковыряться - тупо переделайте логику. не надо никаких рефрешей. тупо делаете в тайной книге sql-запрос к ее же листу (так можно) по некоему тексту и копируете результат в общую книгу.
...
Рейтинг: 0 / 0
Excel 2010, сводка по данным из другой книги
    #38235438
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какую ошибку выдает? текст, скрин?
...
Рейтинг: 0 / 0
Excel 2010, сводка по данным из другой книги
    #38235465
Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понимаю, нет. Забыл сказать, что макрос уже реализован в виде надстройки к excel.
Давайте, на всякий случай, еще раз логику

"тайная" книга data.xlsx - лежит в закрытой для всех папке, содержит кучу данных, с ней постоянно идет работа, т.е. она почти всегда открыта

"публичная" книга res.xlsx - лежит в доступном всем месте, содержит подключение к data.xlsx в виде сводки. Ее суть - показать только ту информацию из data.xlsx, которую всем можно видеть.

Если обычный пользователь открывает res.xlsx и пытается обновить сводку сам - получает ошибку, т.к. у него нет доступа к data.xlsx. Поэтому пишу макрос (надстройку), которой будут пользоваться те, у кого есть доступ к data.xlsx. Макрос открывает res.xlsx, обновляет сводку и сохраняет результат. Т.к. вызывается пользователем, у которого есть доступ к data.xlsx - ошибок доступа нет.

Макрос (в исходном виде, при котором была ошибка), такой:
открываем res.xlsx
вызываем для нее RefreshAll
сохраняем res.xlsx и закрываем его

Если честно, я не вижу, где тут могут быть проблемы. Возможно, при вызове RefreshAll data.xlsx открывается в фоне (например, только на чтение) и конфликт тут.

А ошибка вот такая
...
Рейтинг: 0 / 0
Excel 2010, сводка по данным из другой книги
    #38235467
Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, вариант с простым копированием хороший, просто уже самому интересно разобраться в причинах ошибки :)
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel 2010, сводка по данным из другой книги
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]