我有一个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对象,我就不能这样做。
有什么想法吗?
发布于 2014-09-04 19:40:19
我设法解决了我的问题,将所有东西都声明为对象,然后使用createobject。这样做的主要问题是使用函数,就像这样:我有一个函数"arcValue“。它接受三个参数: arcValue(TimeStamp作为PITimeFormat,模式作为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此外,我必须删除所有引用(无论如何,它们都不再使用了),因为当引用丢失时,它会导致与此无关的代码其他部分出现故障。
发布于 2014-09-03 14:04:37
你可以使用类似这样的东西:
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对象...
https://stackoverflow.com/questions/25629310
复制相似问题