Как определить, был ли проект vba изолирован при первом открытии

Цель: определить, был ли проект изолирован при открытии

В MS Office, когда документ, содержащий проект VBA, открыт, но не является доверенным, у пользователей есть возможность «Включить контент».

Открытие VBA IDE до включения содержимого подтверждает наличие пустого проект в проводнике (без кода).

Нажатие кнопки «Включить содержимое» добавляет второй проект, на этот раз с кодом. По какой-то причине «пустой» проект сохраняется. Имя шаблона - NOT TRUSTED.dotm, а имя документа - NOT TRUSTED.docx.

Only the highlighted project contains code

Примечание: «пустому» проекту всегда присваивается имя проекта по умолчанию «TemplateProject» (тогда как фактический проект имеет то имя, которое было присвоено ему с помощью Tools> ProjectName_Properties).

Вопрос:

Is there a way to detect the presence of the empty project OR otherwise determine if the project was first opened in a protected / sandboxed view?


Я не привязан к какому-либо конкретному подходу, однако предположите, пожалуйста:

  • нет программного доступа к VBA IDE
  • другие проекты не открыты

Редактировать:

Я думаю, что эта ситуация вызывает «Неожиданную ошибку» в надстройке Rubberduck для VBA. Возникает при открытии документа, но прикрепленный шаблон не является доверенным. Это весь задействованный код (в шаблоне):

Private Sub Document_New()
    MsgBox "new"
End Sub

Private Sub Document_Open()
    MsgBox "open"
End Sub

Какую проблему вы пытаетесь решить? Без программного доступа к VBA IDE невозможно определить это, и мне трудно представить, в этих обстоятельствах, почему это может иметь значение.

Cindy Meister 26.10.2018 06:44

@CindyMeister: ну, это раздражает (по крайней мере, для меня), и иногда мне кажется, что это добавляет путаницы в MS Word, поддерживая коллекцию документов, потенциально способствуя проблемам при попытке найти шаблон документа ... У меня нет реальных доказательств, просто хотите удалить, чтобы его можно было исключить как соавтора. Кстати, извините за поздний ответ - в наш дом ворвалась какая-то тупица; разграбили и ограбили.

SlowLearner 01.11.2018 03:46
0
2
154
1

Ответы 1

При открытии файла в защищенном виде (XL2010 вверх) появится всплывающее окно.

Private Sub Workbook_Open()
If Application.ProtectedViewWindows.Count > 0 Then MsgBox "opened in a protected / sandboxed view"
End Sub

Привет, EvR, насколько я могу судить, это не работает ... Можете ли вы подтвердить, что это работает, ЕСЛИ вы создаете файл XL / Word с этим макросом в нем И затем открываете файл на ПК, где ему (файлу) НЕ доверяют ? Если вы можете подтвердить, то можете ли вы также предоставить немного больше информации о том, как воспроизводить?

SlowLearner 01.11.2018 04:46

С моей стороны это работает, я создал файл .xlsb с приведенным выше кодом в разделе ThisWorkbook. Затем я открыл этот файл в режиме защищенного просмотра, после нажатия кнопки «Разрешить редактирование» появится окно msgbox. При обычном открытии нет msgbox

EvR 01.11.2018 09:40

Хорошо ... ну, я пробовал это (на этот раз в Excel и с xlsb), но когда я нажимаю Включить макросы, книга просто открывается, и нет защищенных окон просмотра. Если я попытаюсь запустить ?Application.ProtectedViewWindows.Count в непосредственном окне, все, что я получу, это сообщение о том, что макросы в этом проекте отключены .... Когда я включаю макросы, количество ProtectedViewWindows = 0

SlowLearner 01.11.2018 10:33

Application.ProtectedViewWindows.Count = 1 и после запуска события Workbook_open он равен 0. Таким образом, запуск в непосредственном окне происходит после события Workbook_open. У тебя нет почтового ящика?

EvR 01.11.2018 12:17

Правильно - никаких сообщений для меня. У меня открыта только одна рабочая тетрадь. Я скачиваю файл из DropBox, чтобы ему не доверяли.

SlowLearner 01.11.2018 13:14

Позвольте нам продолжить обсуждение в чате.

EvR 01.11.2018 17:27

Другие вопросы по теме