我们有一个自定义的类库,它从头开始构建,可以执行业务模型所需的各种功能。我们还使用VBA来自动化标准Microsoft软件包和SolidWorks的一些数据插入。到目前为止,我们已经基本上重写了VBA应用程序宏中的代码,但现在正在将类库包含到VBA引用中。我们已经注册了COM interop的类库,并确保它是COM可见的。该文件是可引用的,我们在每个公共类上添加了<ClassInterface(ClassInterfaceType.AutoDual)> _
标签,以便智能感知“有效”。VBA - 使用.NET类库
就这样说,现在出现了这个问题 - 当我们引用类库时,对于这个实例我们称之为Test_Object
,它被拾取并似乎工作得很好。因此,我们继续前进,尝试一个小样本,以确保它使用的公共职能和返回预期值:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim test As New Test_Object.Formatting
Dim t As String
t = test.extractNumber("abc12g3y45")
Target.Value = t
End Sub
这工作正常,返回12345在选定的单元格/秒。
但是,当我尝试不同的类时,遵循完全相同的过程,出现错误(Object variable or With block variable not set
)。代码如下:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim test As New Test_Object.SQLCalls
Dim t As String
t = test.SQLNumber("SELECT TOP 1 ID from testdb.dbo.TESTTABLE") 'where the string literal in the parentheses is a parameter that is passed.
Target.Value = t
End Sub
这失败的t = test.SQLNumber
线。它也失败了类中的另一个函数,该函数返回SQL格式的日期(因此与数据库的连接没有任何关系)。
任何人都可以协助什么可能会导致此错误?我搜索了几个小时无济于事,并且愿意尽一切努力来实现这一目标。
干杯。
编辑:(在.SQLNumber()
方法添加)
Function SQLNumber(query As String) As Double
Dim tno As Double
Try
Using SQLConnection As SqlConnection = New SqlConnection(Connection_String_Current)
SQLConnection.Open()
SQLCommand = New SqlCommand(query, SQLConnection)
tno = SQLCommand.ExecuteScalar
End Using
Catch ex As System.Exception
MsgBox(ex.Message)
End Try
Return tno
End Function
相比之下,extractNumber()
方法:
Function extractNumber(extstr As String) As Double
Dim i As Integer = 1
Dim tempstr As String
Dim extno As String = ""
Do Until i > Len(extstr)
tempstr = Mid(extstr, i, 1)
If tempstr = "0" Or tempstr = "1" Or tempstr = "2" Or tempstr = "3" Or tempstr = "4" Or tempstr = "5" Or tempstr = "6" Or tempstr = "7" Or tempstr = "8" Or tempstr = "9" Or tempstr = "." Then
extno = extno & tempstr
End If
i = i + 1
Loop
If IsNumeric(extno) Then
Return CDbl(extno)
Else
Return 0
End If
End Function
您需要显示'.SQLNumber()'方法的代码以及可能的'.SQLCalls'类。 – 2014-10-01 07:27:37
我可以在'.SQLNumber()'方法中输入,但是整个类本身就超过1000行。 – DeeKayy90 2014-10-01 07:33:53
与我们分享'.SQLNumber()',因为我相信它可能至关重要。 – 2014-10-01 07:35:14