Мне нужно получить доступ к VBA-коду документов Office (книги Excel, но это не относится) через .Net/C#. Я знаю, как это сделать, но для этого пользователь Office должен предоставить доверенный доступ к объектной модели проекта VBA через приложение Office.
Это делает меня неудобным, потому что существует риск того, что пользователь уйдет от вещей так, что нежелательно, и потому что для этого требуется, чтобы пользователь запускал приложение Office и изменял настройки, если доступ не был предоставлен, что не нравится пользователю.
Я считаю, что код .Net не может автоматически изменить этот параметр (что хорошо), но есть ли способ спросить пользователя, хочет ли он временно предоставить разрешение? Или есть способ предоставить доступ к VBE специально для моего приложения, когда оно будет установлено?
Мое предположение заключается в том, что все это невозможно, но я думал, что если кто-то знает ответ, он будет на StackOverflow :)
В качестве бонусного вопроса кто-нибудь знает, как программно проверить, есть ли приложение Office предоставил доступ к объектной модели проекта VBA (без попытки/catch, которая ...)?Можно ли запросить временный доверенный доступ к объектной модели проекта VBA?
1
A
ответ
5
К сожалению, все, что вы запрашиваете, возможно путем изменения ключей реестра, относящихся к безопасности. Вы можете установить раздел реестра, выполнить требуемые задачи, а затем установить ключ реестра обратно, как в приведенном ниже примере.
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
(Отказ от ответственности: Я думаю, что я изначально снял это с другого форума).
Крис, спасибо за ответ, просто зная, что это возможно, уже ценно. Я не знаком с используемым вами языком, это vbscript? – Mathias
Рад помочь Матиасу. Язык - это все VBA, но вы делаете вызовы в Windows Script Host. Хост сценария очень полезен для воздействия на среду, в которой работает ваш VBA. Команда RegWrite зарегистрирована здесь: http://msdn.microsoft.com/en-us/library/yfdfhz1b%28VS.85%29. aspx –
Одна запоздалая мысль. Я полагаю, что более современные операционные системы гораздо более ограничивают программный доступ к реестру, например Vista и Windows 7. Вероятно, лучше всего дважды проверить поведение этих операционных систем. –