Меню

Ошибка the macros in this project are disabled

 

Бахтиёр

Пользователь

Сообщений: 1877
Регистрация: 15.01.2016

Excel 365

Добрый день.
Пытаюсь на компе друга на окне Immediate выполнить Selection.Offset(1).Select
Выдаёт ошибку (см.скрин)
Разрешил макросы — все равно выдает ошибку.

Как лечить?

P.S. Офис у него 2010

Прикрепленные файлы

  • вопрос.png (7.49 КБ)

 

Karataev

Пользователь

Сообщений: 2306
Регистрация: 23.10.2014

Такое может быть, когда открыто несколько книг или надстроек. Какая-то одна из этих книг или надстроек активна. Если запуск макросов в активной книге или надстройке запрещен, то в окне Immediate будет ошибка, о которой Вы пишите.
Чтобы не было ошибки, в окне Project щелкните два раза по какому-нибудь модулю книги или надстройки, в которой разрешены макросы, а затем пробуйте запускать код в окне Immediate.

Изменено: Karataev05.05.2016 10:36:23

 

Бахтиёр

Пользователь

Сообщений: 1877
Регистрация: 15.01.2016

Excel 365

разве разрешение макросов даётся для каждой книги отдельно?
это не параметр самого Application’a?

 

Karataev

Пользователь

Сообщений: 2306
Регистрация: 23.10.2014

Для каждой книги нужно делать разрешение макросов.

 

Бахтиёр

Пользователь

Сообщений: 1877
Регистрация: 15.01.2016

Excel 365

В данный момент не могу проверить на компе, где это ошибка вылезла, но:
У себя проделал:
1) Пользовался одной надстройкой, отключил ее.
2) Закрыл и открыл Эксель, проверил нет никаких надстроек и Персонал
3) Отключил макросы и сохранил книгу
4) Открыл книгу — Окно Immediate работает

Проделал такое с двумя одновременно открытыми книгами — Окно Immediate работает

 

Karataev

Пользователь

Сообщений: 2306
Регистрация: 23.10.2014

В редакторе VBE неудобно сделано, т.к. не понятно, какая книга, надстройка активна в данный момент. Только двойным щелчком можно понять, других признаков нет. Поэтому и возникла у Вас путаница с Immediate.

 

Бахтиёр

Пользователь

Сообщений: 1877
Регистрация: 15.01.2016

Excel 365

спасибо, попробую попозже на том компе, где вылезла ошибка

 

The_Prist

Пользователь

Сообщений: 13962
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Проясню:
если открывали книгу первый раз на ПК, то вполне могли получить предупреждение о том, что книга в защищенном просмотре. Этот режим надо отключить или сразу или чуть позже через меню Файл -Сведения. Если файл в защищенном режиме, то надо будет нажать кнопку «Разрешить редактирование». Пока не отключите этот режим, то если данная книга будет активна, то окно Immediate не будет выполнять команды, ссылаясь на запрет выполнения макросов.
Однако после отключения защищенного режима можете получить так же предупреждение о том, что есть содержимое(макросы) и запрос на включение. Этот запрос будет лишь в случае, если в настройках параметров безопасности установлено «Запуск макросов с уведомлением». При таком запросе надо разрешить макросы.

И только если оба пункта выполнены можно пробовать работу макросов откуда угодно и из любой книги.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Бахтиёр

Пользователь

Сообщений: 1877
Регистрация: 15.01.2016

Excel 365

Дмитрий, спасибо за подробный ответ.

 

voice

Пользователь

Сообщений: 22
Регистрация: 24.06.2016

#10

24.12.2016 22:33:46

У меня похожая проблема. Всё работало, но после каких-то манипуляций перестали запускаться макросы в документе. Макросы разрешены, не понимаю, в чем может быть причина?
При запуске макроса по кнопке на листе выскакивает сообщение, что макросы отключены системой безопасности. Нужно перезапустить книгу и подтвердить включение макросов. Но не выскакивает предложение сделать это при последующем открытии…

Прошу прощения, разобрался! Оказывается всё-таки дело было в настройках безопасности макросов!  

Изменено: voice24.12.2016 22:44:29

  • Remove From My Forums
  • General discussion

  • I have 2 Macros that work in other computers but in this computer they do not work.  The error message is: 

    «The macros in this project are disabled.  Please refer to the online help or documentation of the host application to determine how to enable macros.»

    I looked at some of the documentation nothing worked.

    In Outlook 2010 I went to :

    >File>Options>Trust Center>Trust Center setting…>Macro Settings and Enabled All Macros

    This did not fix any of the problems.  

    Any Suggestions?

    • Changed type

      Monday, May 6, 2013 2:00 PM
      op claimed that the issue has been resolved

1562 / 453 / 51

Регистрация: 10.04.2009

Сообщений: 7,846

1

Макросы в этом проекте отключены

18.08.2020, 09:32. Показов 7190. Ответов 11


здравствуйте чтобы не получать сообщение
The macros in this project are disabled. Please refer to the online help or documentation of the host apliccation to determine how to enable macros. Макросы в этом проекте отключены. Пожалуйста, обратитесь к справке или документации принимающей apliccation чтобы определить, как разрешить выполнение макросов.
Лечится Сервис Макрос Безопасность Низкая Потом закрыть документ и открыть его снова

Я наивно думал, что если юзеру отдать файл Normal.dotm и он его положит в папку микрософтшаблоны-то у него не будет проблем, не будет этого сообщения, оказалось это не так
вопрос, что нужно сделать ещё чтобы помещения этого файла в нужную папку было достаточно? спс



0



828 / 459 / 79

Регистрация: 18.05.2016

Сообщений: 1,229

Записей в блоге: 4

18.08.2020, 09:42

2

Во-первых подменять Normal.dotm — не очень хорошая идея. В нём могут быть личные макросы или какие-то другие штуки пользователя.
Лучше своё творчество предоставлять в виде надстройки. А вот для её установки мало просто положить её в папку, надо ещё её включить в настройках Но без всех этих манипуляций в итоге не обойтись. Макрософак после многочисленных нападок в свой адрес очень печётся о безопасности и теперь всё везде надо подтверждать и включать. Это хорошо, если политика безопасности не потребует ещё и сертификаты подключать к своим проектам.



1



1562 / 453 / 51

Регистрация: 10.04.2009

Сообщений: 7,846

18.08.2020, 09:58

 [ТС]

3

это понятно, ну а если личных макросов нет у пользователя и пойти по пути подмены Normal.dotm
вопрос, что нужно сделать ещё чтобы помещения этого файла в нужную папку было достаточно? спс



0



КостяФедореев

Часто онлайн

771 / 520 / 232

Регистрация: 09.01.2017

Сообщений: 1,785

18.08.2020, 10:07

4

Ципихович Эндрю,
это для excel, может и в word прокатит

Visual Basic
1
2
3
4
5
6
7
8
9
Sub DeleteFileBlock()
    On Error Resume Next
    Key$ = "HKEY_CURRENT_USERSoftwareMicrosoftOffice14.0ExcelSecurityFileBlock"
    arr = Array("XL2Macros", "XL2Worksheets", "XL3Macros", "XL3Worksheets", _
                "XL4Macros", "XL4Workbooks", "XL4Worksheets")
    For Each Item In arr
        CreateObject("WScript.Shell").RegWrite Key$ & Item, 0, "REG_DWORD"
    Next
End Sub

в процедуру Workbook_Open



1



Ципихович Эндрю

1562 / 453 / 51

Регистрация: 10.04.2009

Сообщений: 7,846

18.08.2020, 10:26

 [ТС]

5

да есть похожее у меня в запасниках, щас нужно вспомнить

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Option Explicit
 
Sub Меняем_доверие_к_проектам_VBA_и_уровень_безопасности_в_Word()
 
Dim i As Integer
Dim objWord As Object
Dim objShell As Object
Dim vatDir As String
Dim vatReturn As Currency
Dim Papka As String
Dim AppWord As Word.Application
 
On Error Resume Next
 
Set objWord = CreateObject("Word.Application")
Set objShell = CreateObject("WScript.Shell")
 
For i = 0 To 50
On Error GoTo 150
vatDir = objShell.RegRead( _
"HKEY_CURRENT_USERSoftwareMicrosoftOffice" & objWord.Version & "WordSecurityTrusted LocationsLocation" & i & "Path")
 
If vatDir = ThisWorkbook.Path Then Exit For
If i < 0 Then
150 objShell.RegWrite _
    "HKEY_CURRENT_USERSoftwareMicrosoftOffice" & objWord.Version & "WordSecurityTrusted LocationsLocation" & i & "Description", "Назовите сами", "REG_SZ"
    objShell.RegWrite _
    "HKEY_CURRENT_USERSoftwareMicrosoftOffice" & objWord.Version & "WordSecurityTrusted LocationsLocation" & i & "AllowSubfolders", 1, "REG_DWORD"
    objShell.RegWrite _
    "HKEY_CURRENT_USERSoftwareMicrosoftOffice" & objWord.Version & "WordSecurityTrusted LocationsLocation" & i & "Path", ActiveDocument.Path, "REG_SZ"
    'разрешение доступа к сетевым папкам
    objShell.RegWrite _
"HKEY_CURRENT_USERSoftwareMicrosoftOffice" & objWord.Version & "WordSecurityTrusted LocationsAllowNetworkLocations", 1, "REG_DWORD"
Exit For
End If
Next
 
On Error GoTo 200
vatReturn = objShell.RegRead( _
"HKEY_CURRENT_USERSoftwareMicrosoftOffice" & objWord.Version & "WordSecurityAccessVBOM")
 
If vatReturn = 0 Then
    'за доверительный доступ к проектам VBA отвечает параметр "AccessVBOM"
200 objShell.RegWrite _
    "HKEY_CURRENT_USERSoftwareMicrosoftOffice" & objWord.Version & "WordSecurityAccessVBOM", 1, "REG_DWORD"
    'за уровень безопасности отвечает параметр "Level"
    objShell.RegWrite _
    "HKEY_CURRENT_USERSoftwareMicrosoftOffice" & objWord.Version & "WordSecurityLevel", 1, "REG_DWORD"
    
End If
 
    Set AppWord = New Word.Application
    AppWord.Visible = True
    AppWord.Documents.Open "J:1.doc"
    Word.Application.Quit
 
End Sub

вопрос в том, если поместить в Sub AutoOpen() как же он выполнит, если н доходя до этого сработает зашита

Добавлено через 12 минут
сорри там в строке 23 ошибка, нужно

Visual Basic
1
If vatDir = ActiveDocument.Path Then Exit For



0



828 / 459 / 79

Регистрация: 18.05.2016

Сообщений: 1,229

Записей в блоге: 4

18.08.2020, 10:56

6

Как вы всё это собираетесь делать, если у вас по всему ворду макросы отключены? Может, во внешнем vbs-скрипте это ещё и сработало бы



0



1562 / 453 / 51

Регистрация: 10.04.2009

Сообщений: 7,846

18.08.2020, 11:05

 [ТС]

7

создал Нормал.дотм открыл его, именно в меню выбрал Открыть, сделал процедуру Меняем_доверие_к_проектам_VBA_и_уровень_безопаснос ти_в_Word, раздал Нормал.дотм — будут у пользователя проблемы?



0



828 / 459 / 79

Регистрация: 18.05.2016

Сообщений: 1,229

Записей в блоге: 4

18.08.2020, 11:23

8

Если в настройках ворда в безопасности макросов эти самые макросы отключены, то VBA-кодом из самого ворда вы никакие процедуры по включению макросов не запустите. Попробуйте на своём компе это проделать.
Можно эту процедуру адаптировать в vbs-скрипт и дать пользователю уже ДВА файла. Но проще объяснить ему, какой пункт в настройках включить.
Хотя можно извернуться, и сделать rar-sfx-архив-инсталлятор с этими двумя файлами и командами на копирование нормала и запуска скрипта. Тогда для пользователя это будет всего лишь один exe-шник.
Судя по всему, скрипт только модифицирует реестр. Ну тогда вместо скрипта в архив засунуть reg-файл



0



Ципихович Эндрю

1562 / 453 / 51

Регистрация: 10.04.2009

Сообщений: 7,846

19.08.2020, 10:45

 [ТС]

9

вспомнил, вроде на этом же форуме качал цеэмдэ файл для этого:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
@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 (
  HKCUSoftwareMicrosoftOffice
  HKCUSoftwareWow6432NodeMicrosoftOffice
) 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 (
    HKCUSoftwareMicrosoftOffice%~2
    HKCUSoftwareWow6432NodeMicrosoftOffice%~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 "HKCUSoftwareMicrosoftOffice%~2%~3Security" /v Level /t REG_DWORD /d %MacrosLevel% /f
  if "%~1"=="2007" reg add "HKCUSoftwareMicrosoftOffice%~2%~3Security" /v VBAWarnings /t REG_DWORD /d %MacrosLevel% /f
  if /i "%~3" neq "Outlook" if "%~2" neq "9.0" reg add "HKCUSoftwareMicrosoftOffice%~2%~3Security" /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

Добавлено через 1 час 35 минут
ну и на сегодняшний день под строкой 49 нужно добавить строку

Windows Batch file
1
if "%%a"=="16.0" (echo Обнаружен MS Office 2016 & call :EnumApps 2007 "%%a")

правда уже есть оффис 2019, кто нибудь может добавить строку для оффиса 2019 и опробовать? спс



0



Эксперт WindowsАвтор FAQ

17951 / 7587 / 889

Регистрация: 25.12.2011

Сообщений: 11,317

Записей в блоге: 17

19.08.2020, 21:45

10

Очень сильно не советую так делать для озвученных целей. Пошифруете к хренам всё у юзера. Сейчас как раз гуляет эта зараза в виде имейл от подставных адресатов с макросами в аттаче. С отключенной защитой наломаете дров. Еще и мое имя в скрипте.

По нормальному это делается — покупается сертификат, и ним подписывается документ. Выставляется настройка — доверять подписанным макросам. Либо как вариант (без покупки) выпускаете само-подписанный серт, импортируете в корневое хранилище. Сам так не пробовал, но должно проканать.



0



1562 / 453 / 51

Регистрация: 10.04.2009

Сообщений: 7,846

20.08.2020, 08:53

 [ТС]

11

Цитата
Сообщение от Dragokas
Посмотреть сообщение

Еще и мое имя в скрипте.

не беспокойтесь за это))



0



828 / 459 / 79

Регистрация: 18.05.2016

Сообщений: 1,229

Записей в блоге: 4

21.08.2020, 09:11

12

Цитата
Сообщение от Dragokas
Посмотреть сообщение

покупается сертификат, и ним подписывается документ

покупать не обязательно. в составе офиса есть утилита «создание цифрового сертификата» SELFCERT.EXE. Она создаёт личный локальный сертификат, которым можно подписать любой свой проект. При первом запуске проекта на другом компутаторе и включенной опции доверять только подписанным, он покажет свойства подписи и сертификат можно будет установить. После этого данный проект будет вполне легально работать. При первой же правке VBA-кода в проекте, подпись слетает, о чём предупреждает. Надо повторно подписывать. Подписывать можно вообще абсолютно любым сертификатом, который есть на компе.
Для безопасности офиса в этой всей схеме важно только то, что пользователь самостоятельно принимает решение о подписывании, самостоятельно принимает подпись проекта и таким образом активирует доверие к нему. А подмена файла проекта или его кода это доверие сбрасывает. Т.е. защита работает в полном объёме



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

21.08.2020, 09:11

12

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка teredo не удалось определить
  • Ошибка the ios sdk could not be found please reinstall the application как исправить