VBA Excel SumIf返回0

VBA Excel SumIf返回0,vba,excel,Vba,Excel,我正在使用下面代码中的SumIf函数来计算第309列(=要求和的内容)中所有字符串VALRC(=要查找的内容)的总和。该代码不会导致运行时错误,但尽管应该有结果,Excel只返回0 On Error GoTo Errorhandler ValSrc = Cells(a, 48).Value & "/DIR/" & Cells(4, a).Value ValFnd = Application.WorksheetFunction.SumIf(Range(Cells(5, 309),

我正在使用下面代码中的SumIf函数来计算第309列(=要求和的内容)中所有字符串VALRC(=要查找的内容)的总和。该代码不会导致运行时错误,但尽管应该有结果,Excel只返回0

On Error GoTo Errorhandler
ValSrc = Cells(a, 48).Value & "/DIR/" & Cells(4, a).Value
ValFnd = Application.WorksheetFunction.SumIf(Range(Cells(5, 309), Cells(105673, 309)), Range(Cells(5, 308), Cells(105673, 308)), ValSrc)
Cells(a, b) = ValFnd
编辑:

Sub Gewichte_SumIf()

Dim a As Integer, b As Integer
Dim ValSrc As Variant, ValFnd As Double

For a = 5 To 5
    For b = 49 To 300
        If Cells(a, 306) > 0 Then
            If Cells(3, b) = Cells(a, 33) Then
                On Error GoTo Errorhandler
                'ValSrc = .Cells(a, 48).Value & "/DIR/" & .Cells(4, a).Value
                With Worksheets("DS_(2)_Abfragen")
                    Val Fnd = Application.WorksheetFunction.SumIf(.Range(.Cells(5, 309), .Cells(105673, 309)), .Range(.Cells(5, 308), .Cells(105673, 308)), "53.541331,10.033631<53.4977094,10.1118412<52.9314509,9.2331748<monday/DIR/39454")
                    .Cells(a, b) = ValFnd
                End With
            Else
                Cells(a, b) = ""
            End If
        Else
        End If
    Next b
Next a

Exit Sub

Errorhandler:
Cells(a, b) = 0
Resume Next

End Sub
Sub-Gewichte_-SumIf()
将a设置为整数,将b设置为整数
尺寸VALRC为变型,ValFnd为双精度
对于a=5到5
对于b=49至300
如果单元(a,306)>0,则
如果单元格(3,b)=单元格(a,33),则
关于错误转到错误处理程序
'ValSrc=.Cells(a,48).Value&“/DIR/”&.Cells(4,a).Value
带工作表(“DS_u2)\u Abfragen”)

Val Fnd=Application.WorksheetFunction.SumIf(.Range(.Cells(5309),.Cells(105673309)),.Range(.Cells(5308),.Cells(105673308)),“53.541331,10.033631使用
.Cells
.Range
参考正确的工作表。类似于:

With Worksheets("Name-Of-Worksheet")
    ValSrc = .Cells(a, 48).Value & "/DIR/" & .Cells(4, a).Value
    ValFnd = Application.WorksheetFunction.SumIf(.Range(.Cells(5, 309), .Cells(105673, 309)), .Range(.Cells(5, 308), .Cells(105673, 308)), ValSrc)
    .Cells(a, b) = ValFnd
End With
如果不这样做,它将使用
ActiveSheet
,而这可能不是您所需要的



“代码不会导致运行时错误,但尽管应该有结果,Excel只会返回0。”-它返回0,因为错误转到Errorhandler
。删除此行并查看运行时错误。

SumIf的参数为:

  • 搜索范围
  • 标准
  • 总和范围
  • 所以你应该使用

    ValFnd = Application.WorksheetFunction.SumIf(Range(Cells(5, 308), Cells(105673, 308)), _
                                                 ValSrc, _
                                                 Range(Cells(5, 309), Cells(105673, 309)))
    

    您是否检查了
    ValSrc
    的内容?它是否真的包含您正在搜索的字符串?根据本地窗口,ValSrc的内容是正确的,但我不确定它是否在函数中被接受为字符串。@FunThomasThat这不是问题,因为只使用了一个工作表。但是考虑到dime可能会有问题吗分类/类型@Vityata@Masterarbeit3-阅读文档并检查您是否正确引用了单元格。例如,
    单元格(5309)
    表示第5行第309列,而不是单元格
    E309
    。这不是问题,引用是正确的,但问题在于类型(运行时错误13)@Masterarbeit3-如何声明
    ValFnd
    ValSrc
    并尝试编写
    debug.print Application.WorksheetFunction.SumIf(.Range(.Cells…
    )以查看您是否得到了一些东西。