gpt4 book ai didi

Excel VBA 缺少引用 - PI Osisoft

转载 作者:行者123 更新时间:2023-12-04 20:43:41 34 4
gpt4 key购买 nike

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

我必须明确声明变量,否则代码将不起作用。我不知道为什么。如果我声明,例如 pt as object,Excel 会抛出错误(“类型不匹配”)而不是 PIPoint .

这是我的代码的一部分:

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

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

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

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

另外,我知道我可以通过以下方式检查引用是否已安装:
thisworkbook.vbproject.references

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

任何想法?

最佳答案

我设法解决了将所有内容声明为对象然后使用 createobject 的问题。
这样做的主要问题是使用函数,比如这个:
我有函数“arcValue”。它需要三个参数:
arcValue(TimeStamp 为 PITimeFormat,Mode 为 RetrieveTypeConstants,可选 asynchStatus 为 PIAyncnStatus)
我使用它进行早期绑定(bind)的方式是:

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)

它不起作用。但为什么?
有两个问题:
第一:当我使用后期绑定(bind)(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

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

关于Excel VBA 缺少引用 - PI Osisoft,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25629310/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com