vikttur Пользователь Сообщений: 47199 |
#1 12.05.2020 00:12:06 Взываю к коллективному разуму ) Исходные. Проблема.
ReadOnly:=True не помогает. Примера для тестирования нет. Вернее, таких книг куча, но туда смотреть «низзя!», секреты. P.S. Изменил переменную (замечание ниже) |
||
Виктор, Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
Игорь Пользователь Сообщений: 3631 |
#3 12.05.2020 04:07:12
не имеет значения, как создавались
Вовсе нет. никакой связи. Вероятная причина проблемы: в настройках безопасности Excel заданы ограничения Изменено: Игорь — 12.05.2020 04:12:42 |
||||
vikttur Пользователь Сообщений: 47199 |
#4 12.05.2020 10:20:52
ага, это путь для примера прописывал, в рабочем коде все в порядке.
А у меня нестандартный?
К сожалению, не помогло. Та же попытка защитить меня, неразумного. При открывании вручную предупреждение тоже осталось. |
||||||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#5 12.05.2020 11:13:55 Доброе время суток.
|
||
vikttur Пользователь Сообщений: 47199 |
#6 12.05.2020 11:32:29 Спасибо, Андрей, но и зарядка не помогла ) В Надежных документах: «Отключить надежные документы» — галку вернул на место Спасибо за помощь. Подсказки дали пинок в нужную сторону. |
Мне нужно извлечь данные из файла (‘DatabaseExport.xlsx’), который был сгенерирован и вновь открыт с сайта интрасети. Файл открывается в режиме защищенного просмотра (желтый баннер в верхней части экрана). Я думаю, что необходимо отключить защищенное представление, чтобы я мог извлечь данные из файла. Мой VBA содержится в отдельном файле ‘GetAndAnalyseData.xlsm’:
NameOfNewFile = "ooo"
Do
On Error Resume Next
Application.ActiveProtectedViewWindow.Edit 'This never works first time
NameOfNewFile = Left(ActiveWorkbook.Name, 14)
On Error GoTo 0
If NameOfNewFile = "ooo" Then
ttt = MsgBox("this should not be possible!", vbOKCancel)
If ttt = vbCancel Then Stop
End If
Loop While NameOfNewFile = "ooo"
И вот что происходит, когда я запускаю код:
- Я получаю сообщение о том, что «это не должно быть возможно!»
- Если я нажимаю ОК, я получаю одно и то же сообщение, и файл остается в режиме защищенного просмотра.
- Если я нажимаю Отмена, а затем F5 (чтобы продолжить выполнение), цикл работает как надо (защищенное представление отменяется, значение TEMP устанавливается на имя файла, цикл завершается, и макрос продолжается.
Строка, в которой я пытаюсь присвоить значение для NameOfNewFile, возвращает ошибку, если я не использую «Resume Next»:
- Ошибка времени выполнения ’91’: переменная объекта или переменная блока не установлены
Я пробовал несколько способов исправить это:
-
Запуск этой строки перед загрузкой файла, а также непосредственно перед попыткой отключить защищенный просмотр, но поведение остается тем же.
Application.AutomationSecurity = msoAutomationSecurityForceDisable
-
Превращение папки (в которой хранится загруженный файл) в надежное место, но это не разрешено моими пользовательскими настройками.
-
Снимите флажок «Включить защищенное представление для файлов, исходящих из Интернета» в центре управления безопасностью, но если этот флажок не установлен, я даже не могу открыть файл.
-
Вставка этого кода (но «Set wbPV line» вызывает ошибку во время выполнения «424»: требуется объект):
Dim wbPV As Workbook If Application.ProtectedViewWindows.Count > 0 Then Set wbPV = ActiveProtectedViewWindow.Edit End If
Это должно быть сделано для нескольких файлов, довольно часто, и поэтому было бы полезно решить это в VBA. Может кто-нибудь помочь мне найти способ программно отключить защищенный просмотр для этого типа загружаемого файла? Или есть какой-то другой способ получить данные из файла?
Заблокирован |
||||||||||||
1 |
||||||||||||
Как включить доверие и уровень безопасности (решение)05.01.2015, 00:36. Показов 5139. Ответов 20 Метки нет (Все метки)
До недавнего времени я не мог найти подходящего решения в интернете из VBA программно этого сделать нельзя, я решил сделать через WScript, тоесть специальный файл с расширением .VBS Что происходит ? В скрипте производится запись нужных параметров После того как книга вновь проверила реестр, и условия соблюдены, Вот этот код: его нужно поместить в модуль «ЭтаКнига» Кликните здесь для просмотра всего текста
После чего можно получать программный доступ, например надо вам календарь ? -пожалуйста
Вот еще лучше, теперь ожидание сниженно до 1 секунды , убрал MsgBox из скрипта Кликните здесь для просмотра всего текста
Еще не на всех версиях тестировал, так-что если появяться замечания сообщите пожалуйста здесь.
0 |
Заблокирован |
|
05.01.2015, 00:47 [ТС] |
2 |
Естественно это будет работать, если уровень на момент открытия книги не слишком высокий
0 |
Заблокирован |
|
05.01.2015, 12:59 [ТС] |
3 |
Вот еще момент, 20 строчку из второго примера тоже можно убрать Тестировал я так:
0 |
es geht mir gut 11264 / 4746 / 1183 Регистрация: 27.07.2011 Сообщений: 11,437 |
|
05.01.2015, 18:47 |
4 |
Вот еще момент, 20 строчку из второго примера тоже можно убрать А что ж ты спешишь выложить полусырой код? Доведи до ума, потом выкладывай
0 |
Заблокирован |
||||||||
05.01.2015, 19:41 [ТС] |
5 |
|||||||
Доведи до ума, потом выкладывай Полностью довести до совершенства можно только код из 3 строчек, Кстати, забыл скинуть то что должно быть в скрипте:
И вот итоговый код для книги, все работает исправно,
0 |
The trick |
05.01.2015, 19:43
|
Не по теме: Палишься опять…
0 |
Заблокирован |
||||||||
06.01.2015, 15:14 [ТС] |
7 |
|||||||
Замечаний по теме нет значит, буду считать что последний вариант самый оптимальный [продолжение следует, сейчас еще внесу исправлений для других офисов] Добавлено через 2 часа 48 минут Код для модуля книги, (обычно с названием «ЭтаКнига») Кликните здесь для просмотра всего текста
И вот как красиво это смотриться в скрипте:
три кавычки нужны были для того, чтобы система увидела путь в кавычках .Run «C:.. и тд для того чтобы убедиться как всё работает
0 |
62 / 4 / 1 Регистрация: 27.04.2014 Сообщений: 100 |
|
26.01.2015, 12:13 |
8 |
Работает, но файл не открывается по новой через скрипт, только excel.
0 |
62 / 4 / 1 Регистрация: 27.04.2014 Сообщений: 100 |
|
04.02.2015, 00:32 |
9 |
Если сбивается ассоциация .vbs, то выскакивает сообщение «Отсутствует исполняющее ядро для расширения .vbs» и файл с кодом вообще не удается открыть. Помогает ASSOC .VBS=VBSFile в CMD.
1 |
Заблокирован |
|
04.02.2015, 10:04 [ТС] |
10 |
Помогает ASSOC .VBS=VBSFile в CMD. Вам просто надо чтото исправить в системе, то что не может работать VBS я даже когда свою систему переставлял, у меня в комплекте уже было полно этого утиля в сборке, как-раз и преднозначенного для работы с системой, а у некоторых и батники не работают, вернее они работают или вот еще, надо комунибудь компонент по почте отправить, я его всегда отправляю
1 |
62 / 4 / 1 Регистрация: 27.04.2014 Сообщений: 100 |
|
11.02.2015, 16:01 |
11 |
Вам просто надо чтото исправить в системе, то что не может работать VBS Это просто к тому, что нет 100 % гарантии срабатывания. Мне в итоге было тупо не открыть файл, он сразу же запиливался и вываливалась ошибка. Может добавить в код проверку ассоциации и восстановление на всякий? Night Ranger, еще сможете подсказать, как открыть файл с кодом снова, после исполнения кода?
0 |
Заблокирован |
||||
11.02.2015, 16:23 [ТС] |
12 |
|||
еще сможете подсказать, как открыть файл с кодом снова, после исполнения кода? позже сделаю, думаю там нужно вставить диалог, который бы спрашивал Добавлено через 10 минут
0 |
62 / 4 / 1 Регистрация: 27.04.2014 Сообщений: 100 |
|
11.02.2015, 16:32 |
13 |
Night Ranger, имел в виду файл ексель (в котором vba код), чтобы он приоткрылся по новой.
0 |
Заблокирован |
||||||||
11.02.2015, 16:48 [ТС] |
14 |
|||||||
Night Ranger, имел в виду файл ексель (в котором vba код), чтобы он приоткрылся по новой. В VBS-скрипте там и была такая инструкция, я сейчас занят, Добавлено через 6 минут
тоесть из книги сначало записалось что запустить (перезапустить)
1 |
62 / 4 / 1 Регистрация: 27.04.2014 Сообщений: 100 |
|
11.02.2015, 16:57 |
15 |
Вот она Странно, на другом компе на 10 версии офиса сработала, но защищенный просмотр ставил палки в колеса. Night Ranger, а защищенный просмотр возможно отключить программно?
0 |
Заблокирован |
||||
11.02.2015, 17:15 [ТС] |
16 |
|||
а защищенный просмотр возможно отключить программно? Скорее всего да, потомучно все эти значения обычно в реестре храняться Добавлено через 2 минуты Добавлено через 4 минуты
Добавлено через 3 минуты
1 |
Заблокирован |
||||||||||
12.02.2015, 02:12 [ТС] |
17 |
|||||||||
Вот, как и обещал, альтернативный запуск, только вместо VBS внешним исполняемым файлом будет батник (файл с расширением BAT), с таким вот текстом:
Код для книги:
На всякий случай прилагаю и книгу тоже: Вложения
1 |
Заблокирован |
|
12.02.2015, 02:43 [ТС] |
18 |
Ну вобщем-то, также быстро всё появляется, единственным препятствием может быть
1 |
Заблокирован |
||||||
12.02.2015, 12:53 [ТС] |
19 |
|||||
Еще лучше, смотрите чо придумал !
Код для модуля книги, с названием «ЭтаКнига»
Вот как это смотриться в моём спец-редакторе: Миниатюры
Вложения
1 |
62 / 4 / 1 Регистрация: 27.04.2014 Сообщений: 100 |
|
12.02.2015, 14:05 |
20 |
0 |
Время на прочтение
5 мин
Количество просмотров 25K
Всем привет! Я обычный пользователь MS Excel. Не являющийся профессиональным программистом, но накопивший достаточно опыта, для установки и обхода защиты проектов VBA.
Дисклеймер:
В данной статье рассмотрены виды защиты проектов VBA, от несанкционированного доступа. Их сильные и слабые стороны – ранжирование.
Цель статьи показать слабые и сильные стороны каждого вида защиты проекта VBA в MS Office.
Демонстрация разработанных инструментов, в надстройке Macro Tools VBA, для снятия и установки той или иной защиты.
Все инструменты реализованы стандартными средствами VBA, без использования дополнительных библиотек.
Главная панель Надстройки Macro Tools VBA
Первый вид защиты — Обычный пароль
Время на снятие: мгновенно
Недостаток: быстрый доступ к запароленному модулю VBA
Стандартный инструмент (В среде VBE: панель Tools -> VBAProject Properties -> Protection).
Самая легко снимающаяся защита. В интернете легко находится код, для снятия данной защиты.
Данную защиту можно снять следующим инструментом:
Второй вид защиты — Project is Unviewable
Время на снятие: от 10 до 15 мин (в ручную)
Недостаток: доступ к исходному коду модуля VBA
Один из самых распространённых видов защит. Встречается в 95% файлах с защитой модуля VBA. При попытке открыть проект, открывается диалоговое окно, с сообщением: Project is Unviewable.
Большинство пользователей Excel, не могут снять данную защиту, так как она имеет множество вариации и нюансов, для ее снятие нужно иметь представление о внутренней структуре файла Excel.
Основан, данный вид защиты, на изменение ключей:
CMG=«4A488FCC54D054D054D054D0»
DPB=«0B09CE0F8E108E108E»
GC=«CCCE09520B120C120CED»
в файле vbaProject.bin
.
Кратко, как создается данная защита
Для создания данной защиты нужно, разархивировать файл Excel. Перейти в архиве в папку xl, открыть файл vbaProject.bin, в конце файла находятся наши ключи, редактируем значения ключей на пусто, сохраняем файл. Переводим наш архив, обратно в файл Excel. Готово!
Это самый простой вариант данной защиты, но существует множество модификаций.
Алгоритм снятия защиты Project is Unviewable.
1) Разархивируем подопытный файл, переходим в файл …xl_relsworkbook.xml.rels
2) В файле workbook.xml.rels ищем строку, содержащую слово vbaProject, обычно имеет следующий вид: />. В этой строке нас интересует ключ Target,иего значение. Значение является название файла, в котором находится проект VBA. Иногда, защищающий меняет значения ключа на printerSettings.bin.Получается маскировка файла с проектом VBA под другой файл.
3) Открываем на редактирование файл, указанный в ключе Target, ищем в файле ключи CMG, DPB, GC. И меняем в их названиях любую букву на любую другую, например: CMC, DPC, CC. При поиске нужно быть аккуратным, так как защищающий может поместить в проект форму, подписью повторяющую один из ключей, например такую: DPB=«0B09CE0F8E108E108E». При ее изменении проект VBA, будет удален из книги Excel. Сохраняем и закрываем файл.
4) Переводим архив обратно в файл Excel.
5) Запускаем приложение Excel, выполняем следующее: в Центре управления безопасностью -> Параметры макросов -> Отключить все макросы без уведомления. Перезапускаем Excel. Данная операция нужна, для блокировки защиты, которую иногда ставят авторы макросов. Данная защита реализована следующим образом. В модуле VBA «ЭтаКнига», создается процедуры, реагирующие на события открытия книги или закрытия книги. Эти события обычно проверяют, наличие пароля на проект VBA, запрет сохранения и прочее.
6) Открываем файл. Если все правильно сделано то, Excel, будет ругаться на не правильные ключи, которые мы отредактировали, в пункте 3. Жмем, да, пока данные сообщения не закончатся и диалоговое окно закроется.
Если данное сообщение не появляется то, вы отредактировали не файл который содержит проект VBA.
7) Открываем проект VBA. После всего, проект VBA должен быть доступен.
Но иногда защита не снимается, тогда нужно сохранить файл, проверить, что он действительно сохранился! И проделать повторно операции с 1 по 7. Обычно так происходит когда в файле workbook.xml.rels в ключе Target установлено printerSettings.bin.При сохранение, Excel исправляет это на значение на vbaProject.bin
Данную защиту можно установить и снять следующим инструментом:
Третий вид защиты — Hidden Module, скрытые модули VBA
Время на снятие: от 15 до 20 мин (нужен редактор OLE — объектов, Structured Storage Viewer, например.
Недостаток: доступ к коду модуля VBA
Менее распространенный вид защиты обычно встречается в комбинации с защитой Project is Unviewable. При установке данной защиты модуль VBA не отображается в проекте книги Excel. О его существовании можно узнать, проанализировав код VBA (что требует время!) или открыть файл Excel в программе OpenOffice или LibreOffice (так же можно смотреть код при защите Project is Unviewable, но данный способ не дает возможность получить рабочий файл, без пароля).
Просмотр кода VBA в LibreOffice
Кратко, как создается данная защита
Для создания данной защиты нужно отредактировать файл с проектом VBA — vbaProject.bin или printerSettings.bin,в зависимости от настроек в файле …xl_relsworkbook.xml.rels. В конце файла удаляются строки вида: Module1=32, 32, 635, 330, Z. С нужными названиями модулей.
Для снятия данной защиты нужно в файле vbaProject.bin — восстановить удаленные записи модулей.
Данную защиту можно установить следующим инструментом.
Четвертый вид защиты — Обфускация кода
Время на снятие: неизвестно, зависит от объема кода и пере использования частей кода
Обфусцированный код VBA
Недостаток: необходимость тестирование файла после обфускации, на работоспособность
Крайне редкий вид защиты, основанный на изменении исходного кода VBA, в не удобочитаемый вид для человека. Удаляются все комментарии, форматирование кода, переименовываются названия всех переменных, процедур, функций, модулей и прочего. Злоумышленнику никогда не удастся восстановить первоначальный вид кода, и потребует достаточно много времени для, его восстановления в удобно читаемый вид для человека.
Для де-обфускации кода нужно иметь время, специализированное ПО.
Данную защиту можно установить следующим инструментом.
Пятый вид защиты — Перенос кода в dll
Время на снятие: неизвестно, зависит от языка программирования и квалификации
Недостаток: необходимости в дополнительном файле dll
Один из самых редких видов защиты. Основная идея перенос основного кода в отдельную библиотеку dll, написанную на любом другом языке программирования. Не распространённость данный вид защиты получил по следующей причине, необходимости за файлом Excel, «таскать» дополнительный файл, dll.
Для получения доступа к коду dll, нужно обладать специальными знаниями.
Заключение
В заключении хочу выделить бесполезность защит: Project is Unviewable и Hidden Module которые, по существу ни отчего не защищают. Позволяют просматривать код VBA, без изменения исходного файла, в таких программах как OpenOffice или LibreOffice. Так и снимаются без особых проблем.