excelvba-自定义函数#数值误差;不同工作表上的VLOOKUP
我正在尝试根据函数中给定的参数在不同的工作表上执行VLOOKUP。我已经玩了几个小时,弄不明白为什么它不工作。我尽可能地减少代码以进行测试,但无法有效地找到解决方案。我认为这可能是一个问题,我如何从其他工作表中调用VLOOKUP的范围。代码如下。请给我一些建议。如果我不清楚我在问什么,请提问,我会提供反馈。多谢各位excelvba-自定义函数#数值误差;不同工作表上的VLOOKUP,vba,excel,vlookup,worksheet-function,Vba,Excel,Vlookup,Worksheet Function,我正在尝试根据函数中给定的参数在不同的工作表上执行VLOOKUP。我已经玩了几个小时,弄不明白为什么它不工作。我尽可能地减少代码以进行测试,但无法有效地找到解决方案。我认为这可能是一个问题,我如何从其他工作表中调用VLOOKUP的范围。代码如下。请给我一些建议。如果我不清楚我在问什么,请提问,我会提供反馈。多谢各位 Function GraphDataA(cR As String, time As String, aClient As String, tps As String, dat As
Function GraphDataA(cR As String, time As String, aClient As String, tps As String, dat As String)
Dim client As Boolean
Dim day As Boolean
Dim tot As Boolean
Dim dayTotData As Range
Dim dayTotDatas As Worksheet
Set dayTotDatas = ActiveWorkbook.Sheets("DayTot")
Set dayTotData = dayTotDatas.Range("A3:AI168")
client = False
day = False
tot = False
If date = "" Then
GraphDataA = ""
End If
If aClient = "" Then
GraphDataA = ""
End If
If cR = "Client" Then
client = True
End If
If time = "Day" Then
day = True
End If
If tps = "Total" Then
tot = True
End If
If client = True Then
If day = True Then
If tot = True Then
GraphDataA = WorksheetFunction.VLookup(aClient, dayTotData, WorksheetFunction.Match(dat, dayDate, 0) + 8, _
False)
End If
End If
End If
End Function
您似乎没有从函数返回任何值。尝试将
作为变量添加到第一行末尾,如下所示:
Function GraphDataA(cR As String, time As String, aClient As String, tps As String, dat As String) As Variant
VLOOKUP()
如果没有匹配项,将抛出错误。因此,您需要向函数中添加错误捕获代码
您需要根据需要修改函数
Function MyFunction() as Something
On Error Goto ErrorHandler
' Your existing code goes here
Exit Function
ErrorHandler:
MyFunction = -1 ' Or something which indicates that the value isn't found
End Function
但是OP正在从函数返回值。在VBA中,您用函数名替换return
。@Mehaw他不必像Gareth指出的那样指定返回类型吗?@ArmenSafieh Garabedian默认返回类型是一个变量。我现在能够捕捉到错误,但我仍然无法单独执行匹配函数。GraphDataA=工作表函数.Match(dat,工作表(“DayTot”).Range(“I3:EK3”),0)如果该函数基于dat在DayTot中的假设工作!I3:EK3数组?将MATCH
和VLOOKUP
拆分为代码中的单独行,即将中间匹配值存储在一个变量中,然后在VLOOKUP
中使用。通过在两者上使用断点来找出哪个步骤产生了错误,然后我将VLOOKUP和Match分开,并在Match中识别错误。这是射程的问题。非常感谢。