Всем привет. Давно столкнулся с вопросом изменения уровня безопасности в Excel. Как сделать пользователю инструкцию об изменении настроек безопасности, уровень знания Excel которого примерно такой: в ячейках вносит значения, считает сумму на калькуляторе и указывает ее в итоговой строке? Делал так, как в приложенном файле, но получалось довольно громоздко... На днях на просторах интернета наткнулся на такой макрос[vba]
Код
Sub Enable_AccessVBOM_and_Macro() On Error Resume Next Key$ = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & _ "\Excel\Security\"
' включаем программный доступ к объектной модели проекта VBA CreateObject("WScript.Shell").RegWrite Key$ & "AccessVBOM", 1, "REG_DWORD"
' ставим низкий уровень безопасности (применится после перезапуска Excel) CreateObject("WScript.Shell").RegWrite Key$ & "VBAWarnings", 1, "REG_DWORD" End Sub
[/vba],но так я в них не в зуб ногой, не могу понять как он работает. Автор утверждает, что макрос избавляет пользователя от ежедневного уведомления об «опасных» макросах и меняет уровень безопасности в Excel на «низкий» при следующем запуске, а уведомления об отключенных макросах (с предложением их включить) появляться не будут.
Подскажите так ли это (а то мало ли, может это код-вредитель какой-то) и куда его вставлять: в личную книгу макросов или в "ЭтаКкнига"?
И еще, я думаю, что было бы правильнее, если бы макрос сначала проверял уровень безопасности по такому алгоритму: если запуск макросов запрещен, то открывается лист с сообщением "В настройках безопасности макросы отключены. Перезапустите Excel для работоспособности файла". Так сказать, по умолчанию. Если запуск макросов разрешен, то код, убедившись в этом, удаляет (или скрывает "Sheets("Лист1").Visible = False") лист с сообщением о настройках безопасности и останавливает запуск макроса, изменяющего уровень безопасности. Если я правильно понимаю, то макрос будет таким[vba]
Код
Sub За_работу() Dim reply As Integer reply = MsgBox("Вы будете перемещены на рабочий лист и сможете приступить к работе", vbYesNo, "Запрос на продолжение") If reply = vbYes Then Application.EnableEvents = False Sheets("Лист1").Visible = False ElseIf reply = vbNo Then Exit Sub End If End Sub Sub Enable_AccessVBOM_and_Macro() On Error Resume Next Key$ = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & _ "\Excel\Security\"
' включаем программный доступ к объектной модели проекта VBA CreateObject("WScript.Shell").RegWrite Key$ & "AccessVBOM", 1, "REG_DWORD"
' ставим низкий уровень безопасности (применится после перезапуска Excel) CreateObject("WScript.Shell").RegWrite Key$ & "VBAWarnings", 1, "REG_DWORD" End Sub
[/vba]
Всем привет. Давно столкнулся с вопросом изменения уровня безопасности в Excel. Как сделать пользователю инструкцию об изменении настроек безопасности, уровень знания Excel которого примерно такой: в ячейках вносит значения, считает сумму на калькуляторе и указывает ее в итоговой строке? Делал так, как в приложенном файле, но получалось довольно громоздко... На днях на просторах интернета наткнулся на такой макрос[vba]
Код
Sub Enable_AccessVBOM_and_Macro() On Error Resume Next Key$ = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & _ "\Excel\Security\"
' включаем программный доступ к объектной модели проекта VBA CreateObject("WScript.Shell").RegWrite Key$ & "AccessVBOM", 1, "REG_DWORD"
' ставим низкий уровень безопасности (применится после перезапуска Excel) CreateObject("WScript.Shell").RegWrite Key$ & "VBAWarnings", 1, "REG_DWORD" End Sub
[/vba],но так я в них не в зуб ногой, не могу понять как он работает. Автор утверждает, что макрос избавляет пользователя от ежедневного уведомления об «опасных» макросах и меняет уровень безопасности в Excel на «низкий» при следующем запуске, а уведомления об отключенных макросах (с предложением их включить) появляться не будут.
Подскажите так ли это (а то мало ли, может это код-вредитель какой-то) и куда его вставлять: в личную книгу макросов или в "ЭтаКкнига"?
И еще, я думаю, что было бы правильнее, если бы макрос сначала проверял уровень безопасности по такому алгоритму: если запуск макросов запрещен, то открывается лист с сообщением "В настройках безопасности макросы отключены. Перезапустите Excel для работоспособности файла". Так сказать, по умолчанию. Если запуск макросов разрешен, то код, убедившись в этом, удаляет (или скрывает "Sheets("Лист1").Visible = False") лист с сообщением о настройках безопасности и останавливает запуск макроса, изменяющего уровень безопасности. Если я правильно понимаю, то макрос будет таким[vba]
Код
Sub За_работу() Dim reply As Integer reply = MsgBox("Вы будете перемещены на рабочий лист и сможете приступить к работе", vbYesNo, "Запрос на продолжение") If reply = vbYes Then Application.EnableEvents = False Sheets("Лист1").Visible = False ElseIf reply = vbNo Then Exit Sub End If End Sub Sub Enable_AccessVBOM_and_Macro() On Error Resume Next Key$ = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & _ "\Excel\Security\"
' включаем программный доступ к объектной модели проекта VBA CreateObject("WScript.Shell").RegWrite Key$ & "AccessVBOM", 1, "REG_DWORD"
' ставим низкий уровень безопасности (применится после перезапуска Excel) CreateObject("WScript.Shell").RegWrite Key$ & "VBAWarnings", 1, "REG_DWORD" End Sub
если запуск макросов запрещен, то открывается лист
Если макросы запрещены, то ничего открываться не будет. Открывается-то макросом, а они запрещены. Можно при предыдущем закрытии этого файла макросом скрывать все листы (лучше суперскрывать), а оставлять видимым только тот лист, на котором текст про разрешение макросов. А когда пользователь макросы разрешит, то открываются остальные листы, а этот скрывается. Здесь на форуме куча кодов и файлов с таким функционалом. Много кто выкладывал, и я тоже несколько раз. Поищи
Подскажите так ли это (а то мало ли, может это код-вредитель
Ну, думаю, что Игорю можно доверять http://excelvba.ru/code/Security А вставлять неважно куда, важно, чтобы этот макрос ОДИН раз был запущен на компьютере
если запуск макросов запрещен, то открывается лист
Если макросы запрещены, то ничего открываться не будет. Открывается-то макросом, а они запрещены. Можно при предыдущем закрытии этого файла макросом скрывать все листы (лучше суперскрывать), а оставлять видимым только тот лист, на котором текст про разрешение макросов. А когда пользователь макросы разрешит, то открываются остальные листы, а этот скрывается. Здесь на форуме куча кодов и файлов с таким функционалом. Много кто выкладывал, и я тоже несколько раз. Поищи
Подскажите так ли это (а то мало ли, может это код-вредитель
Ну, думаю, что Игорю можно доверять http://excelvba.ru/code/Security А вставлять неважно куда, важно, чтобы этот макрос ОДИН раз был запущен на компьютере_Boroda_
Если макросы запрещены, то ничего открываться не будет
я неправильно выразился. Все верно, если макросы запрещены, то ничего не откроется кроме листа с текстом (остальные-то скрыты). А если макросы разрешены, то скрытый лист появляется, а лист с сообщением удаляется или скрывается
Если макросы запрещены, то ничего открываться не будет
я неправильно выразился. Все верно, если макросы запрещены, то ничего не откроется кроме листа с текстом (остальные-то скрыты). А если макросы разрешены, то скрытый лист появляется, а лист с сообщением удаляется или скрываетсяlight26
1. Все это естесвенно относится к случаю когда политиками не назначены жестко параметры безопасности для MS Office. . 2. Если отключены по умолчанию и надо включить, то тут или VBS/BAT/CMD делать но или парится с определением ветки исходя из версии установленного офиса, или чохом по всем пройтись. Ключь пользовательский, изменить все можно. К стати можно прям на листе сделать ссылку на файл который надо запустить. 3. ну а отображение инструкции - Александр все написал.
light26,
1. Все это естесвенно относится к случаю когда политиками не назначены жестко параметры безопасности для MS Office. . 2. Если отключены по умолчанию и надо включить, то тут или VBS/BAT/CMD делать но или парится с определением ветки исходя из версии установленного офиса, или чохом по всем пройтись. Ключь пользовательский, изменить все можно. К стати можно прям на листе сделать ссылку на файл который надо запустить. 3. ну а отображение инструкции - Александр все написал.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Если отключены по умолчанию и надо включить, то тут или VBS/BAT/CMD делать но или парится с определением ветки исходя из версии установленного офиса, или чохом по всем пройтись. Ключь пользовательский, изменить все можно. К стати можно прям на листе сделать ссылку на файл который надо запустить
Я тут мало что понял. как я и писал выше, я в макросах ни в зуб ногой. Ну, где знаю какой параметр поменять, там лезу. А так: шаг влево/вправо - расстрел... А что, пакетником можно изменить настройки безопасности в excel?
Если отключены по умолчанию и надо включить, то тут или VBS/BAT/CMD делать но или парится с определением ветки исходя из версии установленного офиса, или чохом по всем пройтись. Ключь пользовательский, изменить все можно. К стати можно прям на листе сделать ссылку на файл который надо запустить
Я тут мало что понял. как я и писал выше, я в макросах ни в зуб ногой. Ну, где знаю какой параметр поменять, там лезу. А так: шаг влево/вправо - расстрел... А что, пакетником можно изменить настройки безопасности в excel?light26
Я не волшебник. Я только учусь
Сообщение отредактировал light26 - Воскресенье, 19.02.2017, 20:11
В данном случае ничего страшного нет если занести по всем от 10.0 до 16.0 , а то и 17.0 на всякий случай. VBS файл
[vba]
Код
On Error Resume Next For i = 10 To 17 ' все версии MS Office от 10 (XP) до 16 (2016) + одна в запас :-) Key$ = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & i & _ ".0\Excel\Security\" ' включаем программный доступ к объектной модели проекта VBA CreateObject("WScript.Shell").RegWrite Key$ & "AccessVBOM", 1, "REG_DWORD" ' ставим низкий уровень безопасности (применится после перезапуска Excel) CreateObject("WScript.Shell").RegWrite Key$ & "VBAWarnings", 1, "REG_DWORD" Next
[/vba]
light26,
В данном случае ничего страшного нет если занести по всем от 10.0 до 16.0 , а то и 17.0 на всякий случай. VBS файл
[vba]
Код
On Error Resume Next For i = 10 To 17 ' все версии MS Office от 10 (XP) до 16 (2016) + одна в запас :-) Key$ = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & i & _ ".0\Excel\Security\" ' включаем программный доступ к объектной модели проекта VBA CreateObject("WScript.Shell").RegWrite Key$ & "AccessVBOM", 1, "REG_DWORD" ' ставим низкий уровень безопасности (применится после перезапуска Excel) CreateObject("WScript.Shell").RegWrite Key$ & "VBAWarnings", 1, "REG_DWORD" Next
bmv98rus, сейчас попробую... ... не, не работает. [vba]
Код
On Error Resume Next For i = 10 To 17 ' все версии MS Office от 10 (XP) до 16 (2016) + одна в запас :-) Key$ = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & i & _ ".0\Excel\Security\" ' включаем программный доступ к объектной модели проекта VBA CreateObject("WScript.Shell").RegWrite Key$ & "AccessVBOM", 1, "REG_DWORD" ' ставим низкий уровень безопасности (применится после перезапуска Excel) CreateObject("WScript.Shell").RegWrite Key$ & "VBAWarnings", 1, "REG_DWORD" Next
[/vba] Скрин ошибки P.S.Параметры безопасности настроены жестко
bmv98rus, сейчас попробую... ... не, не работает. [vba]
Код
On Error Resume Next For i = 10 To 17 ' все версии MS Office от 10 (XP) до 16 (2016) + одна в запас :-) Key$ = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & i & _ ".0\Excel\Security\" ' включаем программный доступ к объектной модели проекта VBA CreateObject("WScript.Shell").RegWrite Key$ & "AccessVBOM", 1, "REG_DWORD" ' ставим низкий уровень безопасности (применится после перезапуска Excel) CreateObject("WScript.Shell").RegWrite Key$ & "VBAWarnings", 1, "REG_DWORD" Next
то есть политиками запрещено? Если так, то к админам. Проверить можно посмотрев наличие ключей в ветке software\policies\microsoft\office\14.0\excel\security соответвующей версии .
Но проверить наличие ключей в реестре не помешает. по пути куда скриптом занесли.
light26,
то есть политиками запрещено? Если так, то к админам. Проверить можно посмотрев наличие ключей в ветке software\policies\microsoft\office\14.0\excel\security соответвующей версии .
Но проверить наличие ключей в реестре не помешает. по пути куда скриптом занесли.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Воскресенье, 19.02.2017, 21:37