假设我有一个名为;Library.dll的自定义库(.dll)
在库中,有一个名为
我生成一个名为testObject的对象:
Dim testObject As New Library.Class有一个叫做testFunction的函数:
Function testFunction(var1 As Double, var2 As Double, var3 As Double, var4 As Double, _
var5 As Double, var6 As Integer, var7 As Double, var8 As Double, var9 As Double)
Call testSetup(var1, var2, var3, var4, var6, var7, var8, var9)
testFunction = testObject.Field(var5)
End Function此函数调用testSetup:
Sub testSetup(var1 As Double, var2 As Double, var3 As Double, var4 As Double, _
var5 As Double, var6 As Integer, var7 As Double, var8 As Double, var9 As Double)
testObject.Lat1 = var1
testObject.Lon1 = var2
testObject.Lat2 = var3
testObject.Lon2 = var4
testObject.mth = var6
testObject.GMT = var7
testObject.ssn = var8
testObject.icf = var9
End Sub我遇到的问题是,在运行时,如果我在这个位置放置一个断点
testObject.Lat1 = var1在运行并跨过下一行时,如果我悬停在对象上
testObject.Lat1我看到了错误
对象变量或块变量未设置
没有崩溃,也没有导致失败的显式错误消息。
有人有什么想法吗?
我不确定错误是在库中还是在代码中?
此外,它还通过输入单元格=testFunction(var1,var2,var3.)从excel中运行。
编辑:注释中的更多信息
发布于 2013-02-28 11:24:18
好的,已经找到解决办法了。这不是由于代码中的错误,而是
Dim testObject As New Library.Class工作得很好。
我也是
Dim testObject As Library.Class紧接着是
Set testObject = New Library.Class问题是,在VB中,我注册了库dll文件
Tools > References我以为这就足够了,因为我没有管理权限。
我错了。
我需要以管理员身份登录,然后使用
regsvr32 ".dll path"现在,我在电子表格中看到了合理的输出。
发布于 2013-02-27 19:28:35
在VBA中,可以通过两种方法初始化对象:
Dim o as New ObjectDim o as Object: Set o = New Object区别在于,在版本1中,对象是在代码中第一次访问时启动的!(注:这与VB.NET不同)。在第二种情况下,它将在运行Set o = New Object时显式地启动。
因此,当您在行testObject.Lat1 = var1中设置断点时,实际上还没有分配testObject,因此调试器无法访问任何内容!只有在执行这一行之后,您才会看到结果。
如果这让您感到困扰,您只需添加
Set testObject = new Library.Classhttps://stackoverflow.com/questions/15118813
复制相似问题