Vba Sub工作正常,但从函数调用不起作用

Vba Sub工作正常,但从函数调用不起作用,vba,excel,Vba,Excel,假设我有一个Excel表格: MOD ACTIVITY PRICE MOD1 0001 1.00 MOD1 0002 2.00 MOD1 0003 3.00 MOD2 0001 4.00 MOD2 0002 5.00 MOD2 0003 6.00 我想知道MOD是'MOD2'和ACTIVITY是'0001'或'0003'的价格之和是多少 简单地等效于以下非常简单的SQL查询: 从TableName中选择sum(price)作为TotalPrice,其中modname='mod2'

假设我有一个Excel表格:

MOD  ACTIVITY PRICE
MOD1 0001  1.00
MOD1 0002  2.00
MOD1 0003  3.00
MOD2 0001  4.00
MOD2 0002  5.00
MOD2 0003  6.00
我想知道MOD是'MOD2'和ACTIVITY是'0001'或'0003'的价格之和是多少 简单地等效于以下非常简单的SQL查询: 从TableName中选择sum(price)作为TotalPrice,其中modname='mod2'和活动位于('0001','0003'))

在阅读不同的资料时,我发现了两个函数AutoFilter和Intersect,并编写了以下子函数:

Dim rangeSum As Currency
Sub FindValue()
    rangeSum = 0
    Range("A1").AutoFilter Field:=1, Criteria1:="32-00505K"
    Range("A1").AutoFilter Field:=2, Criteria1:=Array("0003", "0004"), Operator:=xlFilterValues

    Dim rangeFound As Excel.Range
    Set rangeFound = Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Cells

    Dim rangeUsedForSum As Excel.Range
    Set rangeUsedForSum = Intersect(rangeFound, Range("E:E"))
    Set rangeFound = Nothing

    If Not rangeUsedForSum Is Nothing Then rangeSum = WorksheetFunction.Sum(rangeUsedForSum)

    'MsgBox ("Range: " & rangeUsedForSum.Address & vbCrLf & "Sum: " & rangeSum)
    Range("A1").AutoFilter
End Sub
如果我自己操作潜艇,它工作得很好。 但如果我从函数中调用它:

Function GetValue(arg1 As String, arg2 As String) As Currency
    Call FindValue
    GetValue = rangeSum
End Function
并从Excel工作表中调用此函数,它返回0(调试显示没有交集),my Excel仅按第二个条件进行过滤,并且过滤器未关闭


我不确定自动过滤和交集是否是最好的选择,因为我相信一定有一种更简单的方法来做这件琐碎的事情,但无论如何,如果子函数工作得很好,那么为什么它不能通过函数工作?

意见问题
是否有一种更简单的方法来做这件琐碎的事情
,但公式可能会起作用,或许可以这样说:

 =SUMIFS(C:C,A:A,"MOD2",B:B,"0001")+SUMIFS(C:C,A:A,"MOD2",B:B,"0003")  
或更简短的版本:

=SUM(SUMIFS(C:C,A:A,"MOD2",B:B,{"0001","0003"}))

从工作表单元格直接(或间接)调用的任何代码都无法修改调用它的工作表(或几乎任何其他内容)。因此,如果从用户定义的函数中调用子函数,则不能将其作为子函数的一部分进行筛选。非常小而且非常有用。非常感谢。这正是我需要的。不管怎样,当从Excel工作表调用时,仍然不明白为什么不工作。Tim Williams说从Excel调用不应该修改或过滤工作表,但我的是这样做的。我不知道如何将我的文件附加到这里。我能把它寄出去让人检查一下吗?顺便问一句,有没有一个相等的SumIfs,文本或索引/匹配组合是我的最佳选择?