Подтвердить что ты не робот

Как проверить из .net-кода, включен ли "Доверенный доступ к объектной модели проекта VBA" или нет для приложения Excel?

Как проверить из .net-кода, включен ли " Доверять доступ к объектной модели проекта VBA" или нет для приложения Excel?

В ручном режиме я могу проверить его из приложения Excel - Файл > Параметры > Центр доверия > Параметры центра доверия > Параметры макросa > Доверять доступ к объектной модели проекта VBA

enter image description here

4b9b3361

Ответ 1

Короткий ответ заключается в том, что вы не можете напрямую обращаться к этому параметру с помощью объектной модели Excel (т.е. через PIA). Однако вместо этого вы можете проверить этот параметр в реестре в следующем месте (здесь я предполагаю, что вы используете Office 2007 - версия 12.0):

HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Security\AccessVBOM

это DWORD, который будет 0 или 1 в зависимости от того, включен ли "Доверять доступ к объектной модели VBA".

Однако этот параметр может быть переопределен другим ключом реестра, расположенным по адресу:

HKEY_LOCAL_MACHINE\Software\Microsoft\Office\12.0\Excel\Security\AccessVBOM

это снова DWORD, однако, если это значение равно 0, это означает, что независимо от значения HKCU, доступ к VBOM будет отклонен. Если значение в HKLM равно 1 или отсутствует, то клавиша HKCU будет управлять доступом к VBOM.

Поэтому все, что вам нужно сделать, это проверить эти два ключа с помощью методов реестра в .NET.

Ответ 2

Это сработало для меня

Function VBATrusted() As Boolean
    On Error Resume Next
    VBATrusted = (Application.VBE.VBProjects.Count) > 0
End Function

Private Sub Workbook_Open()
    If Not VBATrusted() Then
    MsgBox "No Access to VB Project" & vbLf & _
      "Please allow access in Trusted Sources" & vbLf & _
      "File > Options > Trust Center > Trust Center Settings > Macro Settings > Trust Access..."
    End If
End Sub

Источник https://www.mrexcel.com/forum/excel-questions/659774-checking-if-trust-access-visual-basic-project-ticked.html

Ответ 3

Найдите в реестре все экземпляры "AccessVBOM" и измените настройки Dword на 1.

Это должно включить его.