运行选择区域中每隔一列并在公式中输入结果的宏时出现问题



我有一个宏,它每隔一列选择一次,并将地址输入到excel定义的函数中:

Dim calcrange As Range
Dim c As Long
Set calcrange = Range("InvestmentOutlay")
For c = 3 To Range("C57").End(xlToRight).Column Step 2
    Set calcrange = Union(calcrange, Cells(57, c))
Next
Range("IRR").Formula = "=IRR((" & calcrange.Address & "))"

但是,当我尝试运行此代码时,此代码有效:

Dim npvRange As Range
Dim n As Long
Set npvRange = Range("C57")
For n = 3 To Range("C57").End(xlToRight).Column Step 2
    Set npvRange = Union(Range("C57"), Cells(57, n))
Next
Range("NPV").Formula = "=NPV((EconGrowth1," & npvRange.Address & "))"

我收到"应用程序定义或对象定义错误"。调试突出显示最后一行代码。我对 VBA 仍然很陌生,不确定导致此错误的原因以及如何解决它。任何帮助将不胜感激,谢谢,

您在EconGrowth1值和npvRange值周围放置的括号使它们成为一个参数,但EconGrowth1应该是第一个参数,其他单元格应该是第二个参数。

所以你需要移动你的括号:

Range("NPV").Formula = "=NPV(EconGrowth1,(" & npvRange.Address & "))"

而且,正如SJR在评论中提到的,您的Union应更改为:

Set npvRange = Union(npvRange, Cells(57, n))

而且,由于您已经将npvRange初始化为 C57 ,因此您可以在第 5 列开始循环。

最终代码可能如下所示:

Dim npvRange As Range
Dim n As Long
Set npvRange = Range("C57")
For n = 5 To Range("C57").End(xlToRight).Column Step 2
    Set npvRange = Union(npvRange, Cells(57, n))
Next
Range("NPV").Formula = "=NPV(EconGrowth1,(" & npvRange.Address & "))"

SJR刚刚在评论中指出,NPV公式甚至不需要括号,因为与IRR公式不同,公式只接受一个参数进行valuesNPV公式的参数为rate, value1, [value2], ...

因此,这意味着Formula行可以只是:

Range("NPV").Formula = "=NPV(EconGrowth1," & npvRange.Address & ")"

最新更新