Reputation: 3512
I have this function
Public Function parseEmployee(ByVal employeeId As Integer, _
ByVal ws As Worksheet) As employee
Dim emp As New employee
Dim empRow As Range
If sheetContainsEmployee(employeeId, ws) Then
Set empRow = ws.Rows(ws.Columns(ID_COLUMN).Find(employeeId).Row)
emp.id = employeeId
emp.Name = empRow.Cells(1, NAME_COLUMN).Value
Else
emp = Null ' Heres what I'd like to do
End If
parseEmployee = emp
End Function
And I'd like to return null in case that the employee is not found in the sheet, is that possible? I get an object or variable nblock not set. error
Upvotes: 9
Views: 39631
Reputation: 184
I have found that returning Nothing from a function causes an exception.
What I did instead was to write a sub that takes a ByRef parameter that is your return value.
Instead of this:
Public Function test() as SomeClass
set test = Nothing
End Function
I wrote this:
Public Sub test(ByRef result as SomeClass)
result = Nothing
End Sub
Upvotes: 0
Reputation: 1
just use """", or "", which one will work, you could try, as:
Else Set emp = """"
note that there is no space between
Upvotes: -1
Reputation: 300769
Only a Variant
can be Null
, instead use Nothing
:
Public Function parseEmployee(ByVal employeeId As Integer, _
ByVal ws As Worksheet) As employee
Dim emp As New employee
Dim empRow As Range
If sheetContainsEmployee(employeeId, ws) Then
Set empRow = ws.Rows(ws.Columns(ID_COLUMN).Find(employeeId).Row)
emp.id = employeeId
emp.Name = empRow.Cells(1, NAME_COLUMN).Value
Else
Set emp = Nothing
End If
Set parseEmployee = emp
End Function
The way you would test:
Dim emp As employee
Set emp = parseEmployee( ... )
If emp Is Nothing Then
Debug.Print "No employee returned."
End If
Ref: Nothing? Empty? Missing? Null?
Upvotes: 20