繁体   English   中英

如何在Excel UDF Function中返回值?

[英]How to return value in Excel UDF Function?

我在VBA中的函数中编写了一些代码,但是我对如何在if-else语句中返回输出值areaAnswer1和areaAnswer2感到困惑。 我还是这个新手。 任何帮助和建议都非常感谢。

Function dateArea(inputDate1 As Date, t1 As Date, t2 As Date, duration As Integer, output As Integer) As Integer
    endOfYear = Workbook.Date(Year(inputDate1), 12, 31)
    inputDate2 = Workbook.Date(Year(inputDate1) + 1, Month(inputDate1), Day(inputDate1))
    endOfDate1 = Workbook.Date(Year(inputDate1) + duration, Month(inputDate1), Day(inputDate1))
    endOfDate2 = Workbook.Date(Year(inputDate2) + duration, Month(inputDate2), Day(inputDate2))
    areaBase1 = endOfYear - inputDate1
    areaBase2 = inputDate2 - endOfYear
    totalArea1 = areaBase1 * 365
    totalArea2 = areaBase2 * 365
    triangleBase1 = endOfDate1 - inputDate1
    triangleHypo1 = Workbook.Sqrt((365 * 365) + (triangleBase1 * triangleBase1))
    triangleBase2 = t1 - inputDate2
    triangleHypo2 = triangleHypo1 * triangleBase2 / triangleBase1
    triangleHeight2 = Workbook.Sqrt((triangleHypo2 * triangleHypo2) - (triangleBase2 * triangleBase2))
    triangleArea2 = (triangleBase2 * triangleHeight2) / 2
    triangleBase3 = (inputDate2 - endOfYear) + (t1 - inputDate2)
    triangleHypo3 = triangleBase3 * triangleHypo2 / (t1 - inputDate2)
    triangleHeight3 = Workbook.Sqrt((triangleHypo3 * triangleHypo3) - (triangleBase3 * triangleBase3))
    triangleArea3 = (triangleBase3 * triangleBaseHeight3) / 2
    areaDiffBot2 = triangleArea3 - triangleArea2
    triangleBase4 = 365 + (t1 - inputDate2)
    triangleHypo4 = triangleBase4 * triangleHeight2 / (t1 - inputDate2)
    triangleHeight4 = Workbook.Sqrt((triangleHypo4 * triangleHypo4) - (triangleBase4 * triangleBase4))
    triangleArea4 = (triangleBase4 * triangleHeight4) / 2
    areaDiffBot1 = triangleArea4 - triangleArea3
    triangleHeight5 = 365 * (endOfDate1 - t2) / triangleBase1
    triangleHypo5 = Workbook.Sqrt((triangleHeight5 * triangleHeight5) + ((endOfDate1 - t2) * (endOfDate1 - t2)))
    triangleArea5 = (endOfDate1 - t2) * triangleHeight5 / 2
    triangleBase6 = (endOfDate1 - t2) + areaBase1
    triangleHeight6 = (triangleBase6) * 365 / (endOfDate1 - t2)
    triangleHypo6 = Workbook.Sqrt((triangleBase6 * triangleBase6) + (triangleHeight6 * triangleHeight6))
    triangleArea6 = (triangleBase6 * triangleHeight6) / 2
    areaDiffTop1 = triangleArea6 - triangleArea5
    triangleBase7 = triangleBase6 + areaBase2
    triangleHeight7 = triangleBase7 * triangleHeight6 / triangleBase6
    triangleHypo7 = Workbook.Sqrt((triangleBase7 * triangleBase7) + (triangleHeight7 * triangleHeight7))
    triangleArea7 = (triangleBase7 * triangleHeight7) / 2
    areaDiffTop2 = triangleArea7 - triangleArea6
    totalUsedArea1 = areaDiffTop1 + areaDiffBot1
    totalUsedArea2 = areaDiffTop2 + areaDiffBot2
    areaAnswer1 = totalArea1 - totalUsedArea1
    areaAnswer2 = totalArea2 - totalUsedArea2
    If output = 1 Then

    ElseIf output = 2 Then

    ElseIf output = 3 Then

    Else

    End If
End Function

在VBA中,您可以通过将返回值分配给以下函数来设置返回值:

areaAnswer1 = totalArea1 - totalUsedArea1
areaAnswer2 = totalArea2 - totalUsedArea2
If output = 1 Then
    dateArea = areaAnswer1
ElseIf output = 2 Then
    dateArea = areaAnswer2
ElseIf output = 3 Then
    ' ...etc

请注意,对该功能的分配不会退出该功能。 在这种情况下,您不需要立即退出,因为您已经退出了。 但是在某些情况下,您希望在分配返回值后立即退出该函数:

Exit Function

只需让函数等于类型值或最后的变量之一即可。

select case output
    case 1
        dateArea = totalUsedArea1 
    case 2
        dateArea = totalUsedArea2 
    case 3
        dateArea = totalUsedArea3 
    case else
        'do something or nothing
end select

请注意,您已指定返回一个整数,该整数不能包含小数,并且必须小于32667(或大约32)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM