Excel VBA缺less参考 – PI Osisoft

我有一个VBA代码,我使用PISDK中的许多对象,我必须添加它作为我的项目的参考。

我必须明确声明variables,否则代码将无法工作。 我不知道为什么。 Excel引发错误(“types不匹配”),如果我声明,例如, pt as object而不是PIPoint

这是我的代码的一部分:

 Dim srv As Server Dim pt As PIPoint Dim pv As PIValue Dim dt As New PITimeFormat 

问题是:当用户没有安装这个引用时,Excel给了我一个编译错误,所以不可能捕获并处理这个错误。 由于此代码在用户定义的函数上运行,只要用户打开工作簿,他就会遇到编译错误。

我必须能够抓住这个错误。

我无法find文档来完全实现此代码的后期绑定。 我不知道是否真的有可能做到这一点。 我知道这可以解决我的问题。

另外,我知道我可以检查参考是否安装,通过:

 thisworkbook.vbproject.references 

但是,如果用户不允许访问Excel选项下的vbaProject对象,我无法做到这一点。

任何想法?

我设法解决我的问题,声明一切为对象,然后使用createobject之后。 这样做的主要问题是使用函数,像这样:我有函数“arcValue”。 它有三个参数:arcValue(作为PITimeFormat的TimeStamp,作为RetrievelTypeConstants的模式,可选的asynchStatus作为PIAyncnStatus)我使用它进行早期绑定的方式是:

 dim pt as PIPoint dim pv as PIValue set pv = pt.data.arcValue("01/09/2014 17:00:00", rtInterpolated) 

这工作。 但是当我这样做:

 Dim myPISDK As Object Dim srv As Object Dim pt As Object Dim pd as Object Dim pv as Object Set myPISDK = CreateObject("PISDK.PISDK") Set pv = CreateObject("PISDK.PIValue") Set srv = myPISDK.Servers.defaultserver Set pd = pt.DATA Set pt = srv.PIPoints("piTAG") Set pv = pd.ArcValue("01/09/2014 17:00:00", rtInterpolated) 

它不起作用。 但为什么? 有两个问题:第一:当我使用后期绑定(createobject)时,我不能访问“rtInterpolated”常量,所以我必须使用它的等效数字。

 Set pv = pd.ArcValue("01/09/2014 17:00:00", 3) 

但是,这仍然行不通。 所以我必须这样做,使其工作:

 Set pv = pd.ArcValue("01/09/2014 17:00:00", 3, Nothing) 

然后一切开始工作。 我不知道为什么,但是VBA使我可以写所有参数,即使它们是可选的。

这样,我可以在运行时检测错误,所以我使用了这个代码:

 If myPISDK Is Nothing Then piVerified = "Erro PI" Exit Function End If 

另外,我不得不删除所有引用(反正他们不再使用),因为在引用丢失的时候,我的代码的其他部分与这个引用无关。

你可以用这样的东西:

 Sub NotUsed() Dim pt As PIPoint End Sub Function ReferenceCheck() As Boolean On Error GoTo NoRef pt = Acrobat.AV_DOC_VIEW ' PIPoint ReferenceCheck = True Exit Function NoRef: ReferenceCheck = False End Function Sub Test() If ReferenceCheck Then NotUsed End Sub 

function是指对象的属性。 如果引用没有问题,则返回true,否则返回false。
在init的阶段,你可以像这样检查。
NotUsed ,不创build错误,因为没有调用…
在我的示例中,我使用ADOBE对象…