0

假设我有一个名为的自定义库(.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 中运行

编辑:评论中的更多信息

4

2 回答 2

2

在 VBA 中,您可以通过两种方法启动对象:

  1. Dim o as New Object
  2. Dim o as Object: Set o = New Object

不同之处在于,在版本一中,对象是在第一次访问代码时启动的!(注意:这与 VB.NET 不同)。在第二种情况下,它会在您运行Set o = New Object.

因此,当您在行中设置断点时testObject.Lat1 = var1,实际上尚未分配 testObject,因此调试器无法访问任何内容!只有在执行此行之后,您才会看到结果。

如果这让您感到困扰,您只需添加

Set testObject = new Library.Class
于 2013-02-27T19:28:35.177 回答
0

好的,已经找到解决方案。这不是由于代码中的错误,而是

Dim testObject As New Library.Class

工作正常。

一样

Dim testObject As Library.Class

其次是

Set testObject = New Library.Class

问题是在VB中,我通过注册库dll文件

Tools > References

我认为这已经足够了,因为我没有管理员权限。

我错了。

我需要以管理员身份登录,然后使用注册 dll

regsvr32 ".dll path"

现在我在电子表格中看到了合理的输出。

于 2013-02-28T11:24:18.617 回答