【问题标题】:VBA ByRef argument type mismatch of 'i' within a For LoopFor循环中'i'的VBA ByRef参数类型不匹配
【发布时间】:2018-06-27 23:50:09
【问题描述】:

我正在计算用户在一列中输入的现金流的现值。列是任意长度的,因此在 For 循环中使用 .Rows.Count 对象作为 n 参数。

我的问题是如何纠正类型不匹配错误:

当程序到达 (r,c) 标识符的 i 时,会弹出 ByRef 参数类型不匹配错误,如下代码第 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

【问题讨论】:

    标签: vba for-loop type-mismatch


    【解决方案1】:

    Function pvCf 期待 Range 作为其第一个参数:

    这一行将Integer 传递给一个期待Range 的函数

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

    另一个警告是Function pvCf 正在对自身进行递归调用,而无法停止递归。修复 Data Type Mismatch 并运行代码后,Excel 将崩溃。

    根据 Jeeped cmets:

    看来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
    

    【讨论】:

    • 我认为参数应该是 cashFlows.Cells(i) 但我也担心递归。
    • 我打赌你是对的 pvCf = cashFlows (i, 1) / Exp(r * i) 从那时起。没有这样的递归。 +1 评论 ..lol
    • 非常感谢!漫长的一天输入公式,建议的修复做到了。
    • @Jeeped 应该得到一半的功劳。但我保留了 Rep..lol
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    相关资源
    最近更新 更多