Excel VBA缺少引用-PI Osisoft



我有一个VBA代码,其中我使用了PISDK中的许多对象,我必须将这些对象添加为对我的项目的引用。

我必须明确声明变量,否则代码将无法工作。我不知道为什么。例如,如果我声明pt as object而不是PIPoint,Excel会抛出一个错误("类型不匹配")。

这是我的部分代码:

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

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

我一定能抓住这个错误。

我找不到完全实现此代码后期绑定的文档。我不知道这是否真的有可能。我知道它可以解决我的问题。

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

thisworkbook.vbproject.references

但是,如果用户不允许访问Excel选项下的vbaProject对象,我将无法执行此操作。

知道吗?

我设法解决了将所有内容声明为对象,然后使用createobject的问题。这样做的主要问题是使用函数,如以下函数:我有一个函数"arcValue"。它需要三个论点:arcValue(TimeStamp为PITimeFormat,Mode为RetrievelTypeConstants,可选asyncStatus为PISyncnStatus)我使用它进行早期绑定的方式是:

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

函数是指对象的一种特性。如果引用可以,则返回true,否则返回false
在初始化阶段,您可以这样检查
NotUsed,不要创建错误,因为未调用
在我的示例中,我使用ADOBE对象。。。

相关内容

  • 没有找到相关文章

最新更新