如下代码中,函数xx是不是不需要再返回值了呢?因为xx1里面已经有一个报错信息了:If xx1= -1 Then MsgBox "xx1 ERROR:" & strErr
Private Function xx(...)
   xx1 intNumber ,cnDB 
   ...
End Function'错误返回-1,成功返回0
Private Function xx1(ByVal intNumber As Integer, cnDB As clsDBconnection) As Integer
    Dim strErr As String
    Dim strSQL(4) As String
    On Error GoTo errYLSJMfy
    strSQL(0) = ...
    strSQL(1) = ...    
    strSQL(2) = ...
    strSQL(3) = ...
    strSQL(4) = ...      
    xx1= opDB.cmtSql(strSQL(), cnDB, strErr)
    If xx1= -1 Then MsgBox "xx1 ERROR:" & strErr:Exit Function 
    YLSJMfy = 0
    Exit Function
errYLSJMfy:
    YLSJMfy = -1
End Function
Public Function cmtSql(strSQL() As String, cnDB As Connection, Optional ByRef strErr As String) As Integer
    Dim i As Integer
    On Error GoTo errCmtSql
    cnDB.BeginTrans   
    For i = 0 To UBound(strSQL)
        cnDB.Execute strSQL(i)
    Next
    cnDB.CommitTrans  
    cmtSql = 0
    Exit Function
errCmtSql:
    strErr = Err.Description
    cnDB.RollbackTrans
    cmtSql = -1
    Err.Clear
End Function还是应该做这样一个处理呢:
Private Function xx(...)
   xx=xx1 intNumber ,cnDB 
   if xx=-1 then msgbox "error":exit Function '这样一旦有多次函数调用,岂非要一堆的if判断了?
                                                     '如果没有返回值,应该如果调出这个函数?
   ....
End Function

解决方案 »

  1.   

    函数本就可以没有返回值,相当于void
    所以问题不存在。
      

  2.   


    当然不是。
    cmtSql是模块里面的函数。
      

  3.   

    是不是下面这个意思:Dim strErr As StringFunction t(x, y)
    On Error GoTo err_t    strErr = ""
        t = x / y
        Exit Functionerr_t:
        t = 0
        strErr = "t_err:" & Err.Description
    End FunctionFunction tt(x, y, z)
    On Error GoTo err_tt
        Dim n
        
        strErr = ""
        n = t(x, y)
        If n = 0 Then
            tt = 0
        Else
            tt = n / z
        End If
        Exit Functionerr_tt:
        tt = 0
        strErr = "tt_err:" & Err.Description
    End FunctionPrivate Sub Command1_Click()
        Dim n
        n = tt(10, 0, 0)
        If n = 0 Then
            MsgBox strErr  '第一个错误就终止了
        Else
            MsgBox n
        End If
    End Sub