簡體   English   中英

VBA如何從函數返回null

[英]VBA How to return null from a 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

如果在工作表中找不到該員工,我想返回null,這可能嗎? 我得到一個未設置的對象或變量nblock。 錯誤

只有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會導致異常。

我所做的是寫一個帶有ByRef參數的子,它是你的返回值。

而不是這個:

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

我寫了這個:

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

只需使用“”“”或“”,哪一個可以工作,你可以試試,如:

Else Set emp =“”“”

請注意,兩者之間沒有空格

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM