VBA如何从函数中返回null

9
我有这个函数
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

如果在表格中找不到雇员,我希望返回null。这种情况是否可能发生?我得到了一个“对象或变量nblock未设置”的错误。

3个回答

19

只有Variant可以为Null,请改用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 

测试的方法:

  Dim emp As employee 
  Set emp = parseEmployee( ... )

  If emp Is Nothing Then
      Debug.Print "No employee returned."
  End If

参考:什么是 Nothing、空值、缺失值和 Null 值?


谢谢回复,我尝试将其设置为“nothing”,但仍然出现运行时错误91:对象变量或块变量未设置。 - Tristian
3
请在“返回”行上添加Set。同时,您需要使用“Set emp = Nothing”语句。 - Tim Williams

0

我发现从函数返回Nothing会导致异常。

我所做的是编写一个子程序,它接受一个ByRef参数作为您的返回值。

不要这样做:

Public Function test() as SomeClass
     set test = Nothing
End Function

我写了这个:

Public Sub test(ByRef result as SomeClass)
     result = Nothing
End Sub

-1

只需使用"""或""", 哪一个都可以,你可以尝试一下,例如:

Else Set emp = """"

请注意两者之间没有空格。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接