2

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

我必须明确声明变量,否则代码将不起作用。我不知道为什么。例如,如果我声明pt as object而不是PIPoint.

这是我的代码的一部分:

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

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

我必须能够捕捉到这个错误。

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

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

thisworkbook.vbproject.references

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

任何想法?

4

2 回答 2

1

我设法解决了将所有内容声明为对象然后使用 createobject 的问题。这样做的主要问题是使用函数,比如这个:我有函数“arcValue”。它需要三个参数:arcValue(TimeStamp as PITimeFormat, Mode as RetrieveTypeConstants, Optional asynchStatus as 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

此外,我不得不删除所有引用(无论如何它们不再使用),因为当引用丢失时,它会导致与此代码无关的其他部分出现故障。

于 2014-09-04T11:40:18.613 回答
0

你可以使用类似的东西:

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。
在 init 阶段你可以这样检查。
NotUsed,不要因为未调用而创建错误...
在我的示例中,我使用 ADOBE 对象...

于 2014-09-03T06:04:37.087 回答