在VBA excel中使用application.worksheetfunction.Vlookup时出现范围错误。

问题描述 投票:0回答:1

我有下面的一段代码,我用这个函数计算下面函数中的一些参数。

Function MyLookup(var1 As Variant, range1 As Range, var2 As Integer) As Double
MyLookup = Application.WorksheetFunction.VLookup(var1, range1, var2, False)
End Function

我用这个函数来计算下面函数中的一些参数。

Function Test(IntMethod As String, CFDate As Date, ValDate As Date, _
              CF As Double, RepFreq As Integer, DiscToDate As String, _
              DiscType As String) As Double
Dim InterpPeriod As Double, PrevDateRate As Double, _
    CurrDateRate As Double, PrevCurvMat As Integer, _
    CurrCurvMat As Integer, rate As Double
Dim Yield_Curves As Range, PrevValDate As Date

Set Yield_Curves = DISC_CFS.Range("Yield_Curves")
PrevValDate = Last_Period(ValDate, CFDate, RepFreq)
'-----------------------------------------------------
InterpPeriod = Application.WorksheetFunction.YearFrac(CFDate, ValDate, 1)
PrevCurvMat = YearsDiff(ValDate, CFDate)
CurrCurvMat = YearsDiff(ValDate, CFDate) + 1
PrevDateRate = MyLookup(PrevValDate, Yield_Curves, 2)
CurrDateRate = MyLookup(ValDate, Yield_Curves, 2)

当我进入MyLookup功能,范围不被识别,它退出了功能.任何提示?

先谢谢你

excel vba range vlookup worksheet-function
1个回答
0
投票

我终于解决了这个问题。错误出在我的一个查找变量上,它是一个日期。日期应该被转换为长类型。

正确的代码如下。

Function MyLookup(var1 As Variant, range1 As Range, var2 As Integer) As Double
MyLookup = Application.WorksheetFunction.VLookup(var1, range1, var2, False)
End Function

主代码是:

Function Test(IntMethod As String, CFDate As Date, ValDate As Date, _
              CF As Double, RepFreq As Integer, DiscToDate As String, _
              DiscType As String) As Double
Dim InterpPeriod As Double, PrevDateRate As Double, _
    CurrDateRate As Double, PrevCurvMat As Integer, _
    CurrCurvMat As Integer, rate As Double
Dim Yield_Curves As Range, PrevValDate As Date

Set Yield_Curves = DISC_CFS.Range("Yield_Curves")
PrevValDate = Last_Period(ValDate, CFDate, RepFreq)
'-----------------------------------------------------
InterpPeriod = Application.WorksheetFunction.YearFrac(CFDate, ValDate, 1)
PrevCurvMat = YearsDiff(ValDate, CFDate)
CurrCurvMat = YearsDiff(ValDate, CFDate) + 1
PrevDateRate = MyLookup(CLng(PrevValDate), Yield_Curves, 2)
CurrDateRate = MyLookup(CLng(ValDate), Yield_Curves, 2)

谢谢你的回答和帮助

© www.soinside.com 2019 - 2024. All rights reserved.