0
Private Function GetLastSameRow(ByVal row, initialValue) As Integer
   .
   .
   .
   If (nextCell.Value = initialValue) Then
      GetLastSameRow = GetLastSameRow(row + 1, initialValue)
   End If
   MsgBox ("returning  : " & row)
   GetLastSameRow = row
End Function

ifステートメントが終了した後、動作は本当に奇妙です。

私はそれにデバッガーを実行しました、そしてこれはそれがジャンプする方法です:

1. End If                            '
2. MsgBox ("returning  : " & row)    ' row value is 3
3. GetLastSameRow = row              '
4. MsgBox ("returning  : " & row)    ' row value is 2 ????????
5. GetLastSameRow = row              '

つまり、基本的にはcorrect値を返したいのですが、その後ジャンプして値End ifを取得correct-1します。

4

1 に答える 1

6

再帰関数を書きました!コール スタックを使用すると、デバッガーが関数の別のインスタンスに移動していることがわかります。問題は次のとおりです。

GetLastSameRow = GetLastSameRow(行 + 1, 初期値)

関数の別のインスタンスを呼び出しています。

于 2013-02-23T09:58:31.867 に答える