Ошибка при вызове функции VBA из кода VSTO - PullRequest
0 голосов
/ 05 августа 2010

У меня есть следующий код VBA в модуле одного из моих файлов .xlt:

Public Sub SetShapeTop(ByVal shapeName As String, ByVal topValue As Single)
  ThisWorkbook.ActiveSheet.Shapes(shapeName).Top = topValue
End Sub

В моей надстройке VSTO у меня есть следующий код C #, который пытается вызвать эту функцию VBA:

m_worksheet.Application.Run("SetShapeTop", kv.Key, kv.Value, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
  Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
  Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
  Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

Эта строка вызывает исключение следующим образом:

(Excerpt from my log4net logs)

[Exception: COMException]
{Target: Cluster Report}
{Invoked Method: Macro execution}
{Target Method: Cluster Report}
{Parameters: }
{Message: Cannot run the macro 'SetShapeTop'. The macro may not be available in this workbook or all macros may be disabled.}
{Stack trace: 
Server stack trace: 


Exception rethrown at [0]: 
  at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
  at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
  at Microsoft.Office.Interop.Excel._Application.Run(Object Macro, Object Arg1, Object Arg2, Object Arg3, Object Arg4, Object Arg5, Object Arg6, Object Arg7, Object Arg8, Object Arg9, Object Arg10, Object Arg11, Object Arg12, Object Arg13, Object Arg14, Object Arg15, Object Arg16, Object Arg17, Object Arg18, Object Arg19, Object Arg20, Object Arg21, Object Arg22, Object Arg23, Object Arg24, Object Arg25, Object Arg26, Object Arg27, Object Arg28, Object Arg29, Object Arg30)
  at MSA.Excel.ClusterPresenter.RenderReport(IReportData reportData, IResponseReportParameters reportParams, Worksheet worksheet) in C:\workspace\MSABasketlink\2.0\MSA.Library.UI\Presentation\ClusterPresenter.cs:line 647} 

Я что-то здесь упускаю?Если кто-то может указать мне правильное направление, я действительно ценю это!

Ответы [ 2 ]

1 голос
/ 05 августа 2010

Это ограничение безопасности.

Перейдите в Центр управления безопасностью в Excel и установите флажок Доверительный доступ к объектной модели проекта VBA.

0 голосов
/ 05 августа 2010

Ваш телефонный код работает при запуске вашего VSTO Addin?Если так, то, вероятно, еще не все загрузилось.Один (глупый) способ обойти это - просто запустить его, пока он не заработает.Извините за VB.NET, но C # должен быть похожим

Dim hasRun As Integer
Do 
    hasRun = Me.Application.Run("SetShapeTop", kv.Key, kv.Value)
Until hasRun > 0

Кроме того, взгляните на эту статью: Расширьте свой код VBA с помощью VSTO

Следует отметить, что этот код не будет работать, если соответствующий доступ не будет предоставлен макросам VBA.

...