嵌套工作表函数的VBA代码中IfError处的编译错误

嵌套工作表函数的VBA代码中IfError处的编译错误,vba,compiler-errors,excel-2016,worksheet-function,Vba,Compiler Errors,Excel 2016,Worksheet Function,所以,我对VBA很陌生,我正在努力学习。我有几个带有紧固件数据的表,我正试图根据主输入表中的内容从中提取信息。我有一个有效的公式,但当我添加不同的紧固件表时,嵌套的IF公式变得难以控制。我决定尝试将公式转换为VBA,但我遇到一个错误:“编译错误:参数数错误或属性分配无效。”它显示在IfError。我可能还错误地调用了表列。下面是我试图转换的公式。我还没有决定如何最好地设置If语句,这样如果用户选择了IFF,它将切换到使用IFF表,但这是另一篇文章 Dim tbl_Solid As ListOb

所以,我对VBA很陌生,我正在努力学习。我有几个带有紧固件数据的表,我正试图根据主输入表中的内容从中提取信息。我有一个有效的公式,但当我添加不同的紧固件表时,嵌套的IF公式变得难以控制。我决定尝试将公式转换为VBA,但我遇到一个错误:“编译错误:参数数错误或属性分配无效。”它显示在IfError。我可能还错误地调用了表列。下面是我试图转换的公式。我还没有决定如何最好地设置If语句,这样如果用户选择了IFF,它将切换到使用IFF表,但这是另一篇文章

 Dim tbl_Solid As ListObject
    
    Dim Rep_Fast_Type
    Dim Incoming_Dia
    Dim BP_Max_Dia
    Dim Test_Dia
    Dim Rep_Fast
    Dim Test_Value
    Dim i
    
    Set tbl_Solid = ThisWorkbook.Sheets("Fastener DB").ListObjects("tbl_Solid")
    
    i = 1
    
    Incoming_Dia = [tbl_Input].Cells(i, 2)
    BP_Max_Dia = [tbl_Input].Cells(i, 3)
    Rep_Fast_Type = [tbl_Input].Cells(i, 4)
    
    If Incoming_Dia > BP_Max_Dia Then
            Test_Dia = Incoming_Dia
        Else
            Test_Dia = BP_Max_Dia
    End If
    
'Compile error at IfError in third line.
    If Rep_Fast_Type = "Solid" Then
       Rep_Fast = WorksheetFunction.Index([tbl_Solid].Range("Fastener"), _
                WorksheetFunction.Aggregate(15, 6, WorksheetFunction.IfError( _
                    Rows([tbl_Solid].Range("Fastener")) / ((Test_Dia >= [tbl_Solid].Range("min")) * (Test_Dia <= [tbl_Solid].Range("max"))), _
                        Rows([tbl_Solid].Range("Fastener")) / (Test_Dia <= [tbl_Solid].Range("min")), 1)))
    End If
    
    'To test values
    MsgBox "Incoming diameter is " & Incoming_Dia & vbCrLf & "B/P max diameter is " & BP_Max_Dia & vbCrLf & "Test diameter is " & Test_Dia & vbCrLf & "Repair fastener type is " & Rep_Fast_Type & vbCrLf & "Repair Fastener is " & Rep_Fast
Dim tbl\u实体作为ListObject
Dim Rep_Fast_类型
暗进线直径
尺寸BP_最大直径
暗测试直径
快速变暗
Dim测试值
昏暗的我
Set tbl_Solid=thishworkbook.Sheets(“紧固件数据库”).ListObjects(“tbl_Solid”)
i=1
传入直径=[tbl\U输入]。单元格(i,2)
BP_Max_Dia=[tbl_输入]。单元格(i,3)
Rep_Fast_Type=[tbl_Input]。单元格(i,4)
如果输入直径>最大直径,则
测试直径=输入直径
其他的
测试直径=最大直径
如果结束
'第三行的IfError处出现编译错误。
如果Rep\u Fast\u Type=“Solid”,则
Rep_Fast=WorksheetFunction.Index([tbl_Solid].Range(“紧固件”)_
聚合(15,6,WorksheetFunction.IfError(_

行([tbl\U Solid]。范围(“紧固件”)/((测试直径>=[tbl\U Solid]。范围(“最小”))*(测试直径只是一个括号放错了:

替换此行:

Rows([tbl_Solid].Range("Fastener")) / (Test_Dia <= [tbl_Solid].Range("min")), 1)))

行([tbl\u Solid].Range(“紧固件”)/(Test\u Dia我不确定公式是否可以这样转换。您可能必须使用
评估
。谢谢,这消除了主题错误,但现在它告诉我在[tbl\u Solid].Range(“紧固件”)处有一个运行时错误5。我不知道如何从命名表中调用列。这似乎属于一个新问题。我建议打开一个新问题,但不只是提及此问题,解释您试图实现的目标,以及为什么使用此方法而不仅仅是一个标准公式,这可能与公式的结果如何为u有关塞德。
Rows([tbl_Solid].Range("Fastener")) / (Test_Dia <= [tbl_Solid].Range("min")), 1)))
Rows([tbl_Solid].Range("Fastener")) / (Test_Dia <= [tbl_Solid].Range("min"))), 1))
With WorksheetFunction
    Rep_Fast = .Index([tbl_Solid].Range("Fastener"), _
        .Aggregate(15, 6, .IfError( _
            Rows([tbl_Solid].Range("Fastener")) / _
                ((Test_Dia >= [tbl_Solid].Range("min")) * (Test_Dia <= [tbl_Solid].Range("max"))), _
                    Rows([tbl_Solid].Range("Fastener")) / (Test_Dia <= [tbl_Solid].Range("min"))), 1))
End With