Vba 将范围函数和vlookup用于Excel上的用户定义函数

Vba 将范围函数和vlookup用于Excel上的用户定义函数,vba,range,user-defined-functions,vlookup,Vba,Range,User Defined Functions,Vlookup,有人能解释一下为什么这3个UDF中的第一个(IncomeTax)能够完美地工作,而第二个(MedicaleRelevy)却给出了#REF!第三个(MedicareSC)提出了#价值? 在我创建MedicareSC之前,MedicareLevy实际上也工作得很好,但现在即使我移除MedicareSC,我似乎也无法让它再次工作。 我试着替换IncomeTax函数中的一些范围或变量,看看它是否有效,但是 Function IncomeTax(income As Double) As Double R

有人能解释一下为什么这3个UDF中的第一个(IncomeTax)能够完美地工作,而第二个(MedicaleRelevy)却给出了#REF!第三个(MedicareSC)提出了#价值? 在我创建MedicareSC之前,MedicareLevy实际上也工作得很好,但现在即使我移除MedicareSC,我似乎也无法让它再次工作。 我试着替换IncomeTax函数中的一些范围或变量,看看它是否有效,但是

Function IncomeTax(income As Double) As Double
 Rng = Range("taxrates")
 Base = Application.WorksheetFunction.VLookup(income, Rng, 2)
 minbrac = Application.WorksheetFunction.VLookup(income, Rng, 1)
 taxRate = Application.WorksheetFunction.VLookup(income, Rng, 3)
 IncomeTax = Base + (income - minbrac) * taxRate
End Function


Function MedicareLevy(income As Double) As Double
 ExemptionLimit = Application.WorksheetFunction.VLookup(income, Range("medicarelevy"), 2)
 LevyRate = Application.WorksheetFunction.VLookup(income, Range("medicarelevy"), 3)
 MedicareLevy = (income - ExemptionLimit) * LevyRate
End Function

Function MedicareSC(income As Double, insurance As String) As Double
 Rng = Range("medicaresurcharge")
 SCRate = Application.WorksheetFunction.VLookup(income, Rng, 2)
If insurance = "yes" Then
    MedicareSC = 0
ElseIf insurance = "no" Then
MedicareSC = income * SCRate
End If
End Function

欢迎光临!什么是
范围(“MedicalRelevy”)
?我发现您缺少的一件事是
Rng=Range(“MedicaResurge”)
中的
Set
语句。如果您已经声明了变量和对象(例如
Dim Rng as Range
),这将更加明显,如果您在模块的最顶端有行
选项Explicit
,这将是“强制性的”。。。。我建议您从这个开始,如果在声明了所有变量和对象之后仍然有问题,请使用更新的代码和问题详细信息回答您的问题。(另请参阅)这些都使用当前的活动工作表,因为您没有完全限定其父工作表的范围。SCRate应声明为变量,然后您不应处理未找到和保险的情况,因为字符串可能是布尔值。感谢您的帮助!我想我现在修好了。我仍然不明白为什么我的第一个能很好地工作。但是,我想重要的是它成功了!如果有人遇到过类似的问题,我还必须更改UDF名称,使其与定义的范围不同。我也不必将保险变量更改为布尔值。虽然我实际上更愿意这样做,但这只是因为变量是用于一个预定义的单元格,用于回答是或否的问题,而且我似乎找不到使yes=true和no=false的代码