VBA如何从函数返回null

Tri*_*ian 6 excel null vba

我有这个功能

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
Run Code Online (Sandbox Code Playgroud)

如果在工作表中找不到该员工,我想返回null,这可能吗?我得到一个未设置的对象或变量nblock.错误

Mit*_*eat 13

只有一个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 
Run Code Online (Sandbox Code Playgroud)

你要测试的方式:

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

  If emp Is Nothing Then
      Debug.Print "No employee returned."
  End If
Run Code Online (Sandbox Code Playgroud)

参考:什么都没有?空的?失踪?空值?

  • 你需要`Set emp = Nothing`同时在"return"行添加Set. (3认同)