Несоответствие типов аргументов VBA ByRef для «i» в цикле For - PullRequest
0 голосов
/ 28 июня 2018

Я рассчитываю текущую стоимость денежных потоков, введенных пользователем в столбце. Столбец имеет любую длину, поэтому используйте объект .Rows.Count в качестве параметра n в цикле For.

Мой вопрос, как исправить ошибку несоответствия типов:

Ошибка несоответствия типов аргументов ByRef появляется, когда программа достигает i идентификатора (r, c), строка 6 следующего кода:

    Function pvCf(cashFlows As Range, r)
    Dim i As Integer
    Dim n As Integer
        n = cashFlows.Rows.Count
            For i = 1 To n
                pvCf = pvCf(i, 1) / Exp(r * i)
            Next i
    End Function

1 Ответ

0 голосов
/ 28 июня 2018

Function pvCf ожидает Range для своего первого аргумента:

Эта строка передает Integer функции, ожидающей Range

pvCf = pvCf (i, 1) / Exp (r * i)

Другим предупреждением является то, что Function pvCf делает рекурсивный вызов самому себе без способа остановить рекурсию. После того, как вы исправите Data Type Mismatch и запустите код, произойдет сбой Excel.

Согласно комментариям Jeeped:

Похоже, что второе появление pvCf должно быть изменено на cashFlows(i, 1)

pvCf = pvCf(i, 1) / Exp(r * i) 

pvCf = cashFlows(i, 1) / Exp(r * i) 
Function pvCf(cashFlows As Range, r)
Dim i As Integer
Dim n As Integer
    n = cashFlows.Rows.Count
        For i = 1 To n
            pvCf = pvCf(i, 1) / Exp(r * i)
        Next i
End Function
...