我创建了一个电子表格,其中(可选)使用通过API COM 3.5类型库提取的彭博数据。我希望能够将该电子表格分发给非彭博用户,但由于他们没有正确的库,他们无法运行它。
如果非BB用户不应该输入语句,则除类模块中的内容外,所有与blpapi相关的代码都位于后面。在类模块中,我懒惰地定义了会话和服务,以便将blpapi特定的定义延迟到类初始化之前(见下文):
Option Explicit
Private session As Object
Dim refdataservice As Object
Private Sub Class_Initialize()
' First create session.
Set session = New blpapicomLib2.session
session.QueueEvents = True
session.Start
' Then open service.
' A service provides the schemas needed to make requests.
session.OpenService "//blp/refdata"
Set refdataservice = session.GetService("//blp/refdata")
End Sub
简而言之-似乎引起问题的代码永远不会运行。我对VBA的了解(非常有限)主要是功能性的,因此我可能缺少明显的东西。这是与编译相关的错误吗?我有办法预编译VBA,以使用户不会遇到此问题吗?也许某种类型的错误处理方法使工作簿不会挂起?
答案 0 :(得分:0)
这是我自己的问题的解决方案:
我有两个函数,它们的输入使用库特定的类型。我将它们转换为通用对象(在会话上使用后期绑定和refdataservice不够)。然后,我取消选择bbcom库,并在Workbook_Open()中向dll文件添加了动态引用。即使加载失败,也可以捕获错误,而必须先消除excel。如果用户尝试使用使用与BB相关的代码的工作簿的一部分,这仍然是一个问题,但是可以通过几种不同的方式来缓解这种情况。