我有一个宏,它每隔一列选择一次,并将地址输入到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
公式不同,公式只接受一个参数进行values
,NPV
公式的参数为rate, value1, [value2], ...
。
因此,这意味着Formula
行可以只是:
Range("NPV").Formula = "=NPV(EconGrowth1," & npvRange.Address & ")"