可以加载项通信吗?连接加载项/加载项依赖项

时间:2015-10-21 14:56:30

标签: excel vba excel-vba excel-addins

加载项可以通信吗?

我有一个与API通信的Excel插件。在该加载项中,它可以将XML打包数据作为字符串接收,将API作为URL / I作为字符串路由,然后对其进行POST数据:

Function PostApiXmlToXml(XML as String, URL as String) as String
   'Post to Url that XML data
   'PostApiXmlToXml = the XML response
End Function

问题在于需要许多不同的路线和功能。并非所有用户都需要/有权使用所有路由。

我要么只是让每个人都能访问每个功能,但是如果他们试图发送给他们,他们就无法访问它,将会以未经授权的方式回复。

或者有一种方法可以为连接到主要通信的每个功能添加一个?

e.g。这个单独的加载项有一个依赖于第一个的函数:

Function CalculateSomething(x as double, y as double, z as double) as double
    Xml = "<x>" + x + "</x>" &_
           "<y>" + y + "</y>" &_
           ""  ""       "" "" 
    route = "www.api.com/api/controller/func"
    CalculateSomething = PostApiXmlToXml(xml,route)
End Function

主要问题是用户可以随时选择使用新功能,因此我希望用户能够尽可能轻松地下载另一个允许他们访问的加载项。还有更多功能可以在未来添加。

是否有可能或我是否会以错误的方式解决这个问题?

人们会建议走VSTO路线吗?(没有任何经验)

1 个答案:

答案 0 :(得分:1)

  

是一种为每个连接到主要通信的功能添加的方式吗?

假设CalculateSomething位于一个加载项中,而您的另一个函数PostApiXmlToXml位于单独加载项的Module1中(我们只需将其称为“MainAddIn.xlam”,它已安装在用户的机器)

Function CalculateSomething(x as double, y as double, z as double) as double
    Xml = "<x>" + x + "</x>" &_
           "<y>" + y + "</y>" &_
           ""  ""       "" "" 
    route = "www.api.com/api/controller/func"
    CalculateSomething = _
        Application.Run("MainAddIn!Module1.PostApiXmlToXml", xml, route)
End Function

注意您需要在Run声明中按名称指定VBProject和模块。

要检查是否安装了插件,您可以使用如下函数:

Function IsAddInInstalled(name$) As boolean
Dim a
Dim ret as Boolean
For each a in Application.AddIns
    if (a.Name = name) then
        ret = True
        Exit For
    End If
Next

If not ret Then MsgBox "Please install " & name
IsAddInInstalled = ret
End Function

决定在哪里调用此函数是另一回事。当然,您可以在Dependent加载项的每个过程中调用它,但可能最好将它放在Workbook_Open过程中,只需一次:

Sub Workbook_Open()
    Call IsAddInInstalled("MainAddIn.xlam")
End Sub

这样,每次用户打开Excel时,都会检查“主”加载项的可用性,如果不可用则会出现一个消息框。