excelvba-自定义函数#数值误差;不同工作表上的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

我正在尝试根据函数中给定的参数在不同的工作表上执行VLOOKUP。我已经玩了几个小时,弄不明白为什么它不工作。我尽可能地减少代码以进行测试,但无法有效地找到解决方案。我认为这可能是一个问题,我如何从其他工作表中调用VLOOKUP的范围。代码如下。请给我一些建议。如果我不清楚我在问什么,请提问,我会提供反馈。多谢各位

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中识别错误。这是射程的问题。非常感谢。