这是我在vb.net上的第一个项目,我现在正在努力将vba工作添加到vb.net COM加载项中。我觉得我有点陷入困境,但错误处理让我受阻。
这是我一直用来理解try-catch以及如何将异常传递给调用者的测试
Public Sub test()
Dim ActWkSh As Excel.Worksheet
Dim ActRng As Excel.Range
Dim ActCll As Excel.Range
Dim sVar01 As String
Dim iVar01 As Integer
Dim sVar02 As String
Dim iVar02 As Integer
Dim objVar01 As Object
ActWkSh = Me.Application.ActiveSheet
ActRng = Me.Application.Selection
ActCll = Me.Application.ActiveCell
iVar01 = iVar02 = 1
sVar01 = CStr(ActCll.Value)
sVar02 = CStr(ActCll.Offset(1, 0).Value)
Try
objVar01 = GetValuesV(sVar01, sVar02)
'DO SOMETHING HERE
Catch ex As Exception
MsgBox("ERROR: " + ex.Message)
'LOG ERROR SOMEWHERE
Finally
MsgBox("DONE!")
End Try
End Sub
Private Function GetValuesV(ByVal QryStr As Object, ByVal qryConn As String) As Object
Dim cnn As Object
Dim rs As Object
Try
cnn = CreateObject("ADODB.Connection")
cnn.Open(qryConn)
rs = CreateObject("ADODB.recordset")
rs = cnn.Execute(QryStr)
If rs.EOF = False Then
GetValuesV = rs.GetRows
Else
Throw New System.Exception("Query Return Empty Set")
End If
Catch ex As Exception
Throw ex
Finally
rs.Close()
cnn.Close()
End Try
End Function
我想要测试错误消息,但是 MsgBox(“错误:”+ ex.Message) 弹出一些意外的东西(对象变量或未设置块变量) 我在这做错了什么? 谢谢 d
答案 0 :(得分:0)
可能是因为你正在做
Throw ex
尝试使用
Throw
代替。这样可以保持错误堆栈,而不是每次都生成一个新的错误堆栈。
根据您的评论,我认为您遇到的具体问题出在Finally
块中。您正在尝试关闭记录集和连接,但如果在实例化时出现错误,则它们将不存在;因此,您会收到Object variable or with block
错误。
(无论如何,我认为连接是一个使用声明。)