Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA缺少参考-PI Osisoft_Excel_Vba_Osisoft - Fatal编程技术网

Excel VBA缺少参考-PI Osisoft

Excel VBA缺少参考-PI Osisoft,excel,vba,osisoft,Excel,Vba,Osisoft,我有一个VBA代码,其中我使用了PISDK中的许多对象,我必须将这些对象作为参考添加到我的项目中 我必须显式声明变量,否则代码将无法工作。我不知道为什么。例如,如果我将pt声明为object而不是PIPoint,Excel将抛出一个错误(“类型不匹配”) 以下是我的部分代码: Dim srv As Server Dim pt As PIPoint Dim pv As PIValue Dim dt As New PITimeFormat 问题是:当用户没有安装此引用时,Excel会给我一个编译错

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

我必须显式声明变量,否则代码将无法工作。我不知道为什么。例如,如果我将
pt声明为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对象,我将无法执行此操作


有什么想法吗?

你可以用这样的方法:

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。
在初始化阶段,您可以这样检查。
sub未使用,不创建错误,因为未调用…

在我的示例中,我使用ADOBE对象…

我设法解决了将所有内容声明为对象,然后使用createobject的问题。 这样做的主要问题是使用函数,例如: 我有函数“arcValue”。它有三个论点: arcValue(时间戳为PITimeFormat,模式为RetrievelTypeConstants,可选asynchStatus为PiayncStatus) 我使用它进行早期绑定的方式是:

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

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

Hello。我没有检查它,但我认为它不会工作,因为正如我所说,这是一个编译错误。所以,即使我只是写了一个函数,即使它从未被调用,Excel也会给出一个错误。我设法找到了一个解决方案,我已经发布了。非常感谢。