台灣最大程式設計社群網站
線上人數
756
 
會員總數:244654
討論主題:188760
歡迎您免費加入會員
討論區列表 >> office VBA / WinOS >> 請問如何理解這段遞迴呼叫?如何對這段遞迴呼叫進行測試?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
請問如何理解這段遞迴呼叫?如何對這段遞迴呼叫進行測試?
價值 : 50 QP  點閱數:226 回應數:3

樓主

小粽子
門外漢
0 4
121 7
發送站內信

各位大神好:以下的程式來自於電腦人文化出版的「excelvba最強權威」第152~153頁,小弟看不懂那段case"variant()",請問(1)該怎麼在工作表中對這段程式(case"variant()"這段)進行簡單測試?(2)請問那個n(m)參數代表什麼意思?


Option Explicit

Function MYSUM(ParamArray args() As Variant) As Variant
' Emulates Excel's SUM function

' Variable declarations
Dim i As Variant
Dim TempRange As Range, cell As Range
Dim ECode As String
Dim m, n
MYSUM = 0

' Process each argument
For i = 0 To UBound(args)
' Skip missing arguments
If Not IsMissing(args(i)) Then
' What type of argument is it?
Select Case TypeName(args(i))
Case "Range"
' Create temp range to handle full row or column ranges
Set TempRange = Intersect(args(i).Parent.UsedRange, args(i))
For Each cell In TempRange
If IsError(cell) Then
MYSUM = cell ' return the error
Exit Function
End If
If cell = True Or cell = False Then
MYSUM = MYSUM + 0
Else
If IsNumeric(cell) Or IsDate(cell) Then _
MYSUM = MYSUM + cell
End If
Next cell
Case "Variant()"
n = args(i)
MsgBox n
For m = LBound(n) To UBound(n)
MYSUM = MYSUM(MYSUM, n(m)) 'recursive call
Next m
Case "Null" 'ignore it
Case "Error" 'return the error
MYSUM = args(i)
Exit Function
Case "Boolean"
' Check for literal TRUE and compensate
If args(i) = "True" Then MYSUM = MYSUM + 1
Case "Date"
MYSUM = MYSUM + args(i)
Case Else
MYSUM = MYSUM + args(i)
End Select
End If
Next i
End Function



搜尋相關Tags的文章: [ 遞迴 ] ,
本篇文章發表於2019-02-14 06:07
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

香帥
檢舉此回應
請參考以下程式碼,去執行看看就知道。

Variant() 代表是一個可以存放任何形式的陣列,像以上可以整數、浮點數、字串
本篇文章回覆於2019-02-15 19:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
不錯的參考

香帥
檢舉此回應
另n(m)跟以上的k(0)同樣意思,n 代表 k,0~3代表m
本篇文章回覆於2019-02-15 19:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

小粽子
檢舉此回應
了解了,謝謝!
本篇文章回覆於2019-02-16 05:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.