Можно ли запросить временный доверенный доступ к объектной модели проекта VBA?

Мне нужно получить доступ к коду VBA документов Office (книги Excel, но это не актуально) через.Net / C#. Я знаю, как это сделать, но для этого требуется, чтобы пользователь Office предоставил доверенный доступ к объектной модели проекта VBA через приложение Office.
Это доставляет мне неудобство, поскольку существует риск того, что пользователь оставит все настроенным таким образом, что нежелательно, и потому, что для этого требуется, чтобы пользователь запустил приложение Office и изменил настройки, если доступ не был предоставлен, что не является приятным для пользователя.
Я считаю, что.Net-код не может изменить эту настройку автоматически (что хорошо), но есть ли способ спросить пользователя, хочет ли он / она временно предоставить авторизацию? Или есть способ предоставить доступ к VBE конкретно моему приложению при его установке?
Я предполагаю, что ничего из этого не выполнимо, но я подумал, что если бы кто-то знал ответ, он / она был бы в Stackru:)
В качестве дополнительного вопроса, кто-нибудь знает, как программно проверить, предоставило ли приложение Office доступ к объектной модели проекта VBA (без попытки / уловки, которая...)?

1 ответ

Решение

К сожалению, то, что вы запрашиваете, возможно, изменив ключи реестра, относящиеся к безопасности. Вы можете установить ключ реестра, выполнить необходимые вам задачи, а затем вернуть ключ реестра обратно, как в примере ниже.

  Public Sub ModifyVBA()
    Set wsh = CreateObject("WScript.Shell")
    'key to modify
    keyName = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & _
        Application.Version & "\Excel\Security\AccessVBOM"
    'enable access
    wsh.RegWrite keyName, 1, "REG_DWORD"
    'read the vba project name
    Application.VBE.ActiveVBProject.VBComponents.Add (vbext_ct_ClassModule)
    'disable access
    wsh.RegDelete keyName
End Sub

(Отказ от ответственности: я думаю, что я изначально снял это с другого форума).

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