我們有一個自定義的類庫,它從頭開始構建,可以執行業務模型所需的各種功能。我們還使用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