2009-12-14 2 views
1

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

ответ

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 

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

+0

Крис, спасибо за ответ, просто зная, что это возможно, уже ценно. Я не знаком с используемым вами языком, это vbscript? – Mathias

+0

Рад помочь Матиасу. Язык - это все VBA, но вы делаете вызовы в Windows Script Host. Хост сценария очень полезен для воздействия на среду, в которой работает ваш VBA. Команда RegWrite зарегистрирована здесь: http://msdn.microsoft.com/en-us/library/yfdfhz1b%28VS.85%29. aspx –

+0

Одна запоздалая мысль. Я полагаю, что более современные операционные системы гораздо более ограничивают программный доступ к реестру, например Vista и Windows 7. Вероятно, лучше всего дважды проверить поведение этих операционных систем. –