Включение макросов в Microsoft Office 2003 - 2013
Автор скрипта: Dragokas
Версия: v.1.3 (31.08.2016)
Совместимость: Windows XP, Vista, Seven, 8. (x32, x64)
Office 2000, XP, 2003, 2007, 2010, 2013 (x32, x64).
- Завершите все офисные приложения.
- После запуска батника выберите цифру и нажмите ENTER:
1 - Запуск макросов без уведомления.
2 - Запуск макросов с разрешения пользователя.
3 - Запретить запуск неподписанных макросов (не уведомлять).
Рекомендуется выбирать 2.
Макросы включаются/отключаются одновременно во всех установленных приложениях:
- Word
- Excel
- OutLook
- Access
- PowerPoint
Код (DOS):
@echo off
:: Macros Access Script by Alex Dragokas
echo .
echo Утилита включения макросов для MS Office 2003-2013
echo .
:ch_Security
echo Введите цифру и нажмите кнопку ENTER:
echo .
echo 1 - Запуск макросов без уведомления.
echo 2 - Запуск макросов с разрешения пользователя.
echo 3 - Запретить запуск неподписанных макросов (не уведомлять).
echo .
set ch=
set /p "ch=Ваш выбор: "
echo .
if "%ch%"=="1" set "MacrosLevel=1"
if "%ch%"=="2" set "MacrosLevel=2"
if "%ch%"=="3" set "MacrosLevel=3"
if "%ch%" neq "1" if "%ch%" neq "2" if "%ch%" neq "3" goto ch_Security
:ch_VBA
echo Хотите включить программный доступ к коду макроса?
echo .
echo 1 - Да. Разрешить.
echo 2 - Нет. Запретить.
echo .
set ch=
set /p "ch=Ваш выбор: "
echo .
if "%ch%"=="1" set "ProjectLevel=1"
if "%ch%"=="2" set "ProjectLevel=0"
if "%ch%" neq "1" if "%ch%" neq "2" goto ch_VBA
:: Проверяю, запущен ли хоть один из процессов MS Office
:Check
call :CheckRun || (echo .& echo НЕЛЬЗЯ продолжить. Сначала нужно завершить все офисные приложения.& echo .& pause & echo .& goto Check)
For %%k in (
HKCU\Software\Microsoft\Office
HKCU\Software\Wow6432Node\Microsoft\Office
) do (
For /F "tokens=5 delims=\" %%a in ('reg query "%%k" 2^>NUL ^| findstr /R "^.*\\[0-9].*"') do (
if "%%a" neq "8.0" (
if "%%a"=="9.0" (echo Обнаружен MS Office 2000 & call :EnumApps 2003 "%%a")
if "%%a"=="10.0" (echo Обнаружен MS Office XP & call :EnumApps 2003 "%%a")
if "%%a"=="11.0" (echo Обнаружен MS Office 2003 & call :EnumApps 2003 "%%a")
if "%%a"=="12.0" (echo Обнаружен MS Office 2007 & call :EnumApps 2007 "%%a")
if "%%a"=="13.0" (echo Обнаружен MS Office 2010 & call :EnumApps 2007 "%%a")
if "%%a"=="14.0" (echo Обнаружен MS Office 2010 & call :EnumApps 2007 "%%a")
if "%%a"=="15.0" (echo Обнаружен MS Office 2013 & call :EnumApps 2007 "%%a")
if not Defined isChanges (echo Обнаружена неизвестная версия MS Office & call :EnumApps 2007 "%%a")
echo .
)
)
)
pause
exit /B
:EnumApps %1-mso.family %2-key.version
Set "isChanges=true"
For %%k in (
HKCU\Software\Microsoft\Office\%~2
HKCU\Software\Wow6432Node\Microsoft\Office\%~2
) do (
For /F "tokens=6 delims=\" %%a in ('reg query "%%k" 2^>NUL ') do (
if /i "%%a"=="Word" call :ChangeSecurity "%~1" "%~2" "%%a"
if /i "%%a"=="Excel" call :ChangeSecurity "%~1" "%~2" "%%a"
if /i "%%a"=="PowerPoint" call :ChangeSecurity "%~1" "%~2" "%%a"
if /i "%%a"=="Access" call :ChangeSecurity "%~1" "%~2" "%%a"
if /i "%%a"=="Outlook" call :ChangeSecurity "%~1" "%~2" "%%a"
)
)
Exit /B
:ChangeSecurity %1-mso.family %2-key.version %3-Application
echo %~3
if "%~1"=="2003" reg add "HKCU\Software\Microsoft\Office\%~2\%~3\Security" /v Level /t REG_DWORD /d %MacrosLevel% /f
if "%~1"=="2007" reg add "HKCU\Software\Microsoft\Office\%~2\%~3\Security" /v VBAWarnings /t REG_DWORD /d %MacrosLevel% /f
if /i "%~3" neq "Outlook" if "%~2" neq "9.0" reg add "HKCU\Software\Microsoft\Office\%~2\%~3\Security" /v AccessVBOM /t REG_DWORD /d %ProjectLevel% /f
Exit /B
:CheckRun
TASKLIST /FI "imagename eq winword.exe" | find /i "winword.exe" && exit /B 1
TASKLIST /FI "imagename eq excel.exe" | find /i "excel.exe" && exit /B 1
TASKLIST /FI "imagename eq powerpnt.exe" | find /i "powerpnt.exe" && exit /B 1
TASKLIST /FI "imagename eq outlook.exe" | find /i "outlook.exe" && exit /B 1
TASKLIST /FI "imagename eq msaccess.exe" | find /i "msaccess.exe" && exit /B 1
Exit /B 0
Инструкция, как включить макросы вручную.