是什么导致我的类型不匹配以及如何解决

时间:2019-10-20 16:49:08

标签: excel vba type-mismatch

我正在尝试计算平均值,但是在没有工作表功能的VBA中。我收到与此行相关的类型不匹配错误,但不知道为什么或如何解决?

sumall = sumall + data_set(i, 19)
Sub segment_trigger_returns()
    Application.ScreenUpdating = False

    Dim segment_trigger As Boolean
    Dim data_set As Variant
    data_set = Range("A4:AV75617")
    Dim i As Long

    For i = 2 To UBound(data_set, 1)
        Dim sumall As Long
        Dim cnt As Long
        cnt = 0
        sumall = 0
        company_name_curperiod = data_set(i, 3)
        company_name_prevperiod = data_set(i - 1, 3)
        segments_curperiod = data_set(i, 10)
        segments_prevperiod = data_set(i - 1, 10)

        If company_name_curperiod = company_name_prevperiod And segments_curperiod <> segments_prevperiod Then
            sumall = sumall + data_set(i, 19)
            cnt = cnt + 1
        End If
    Next i

    If cnt > 0 Then
        Sheets("Control").Range("K6") = sumall / cnt
    End If

    Application.ScreenUpdating = True
End Sub

1 个答案:

答案 0 :(得分:-2)

要调试您的代码,请运行此版本,然后在代码停止在“停止”行上时,跨步查看data_set(i,19)是否为数字。

Sub segment_trigger_returns()
    Application.ScreenUpdating = False

    Dim segment_trigger As Boolean
    Dim data_set As Variant
    data_set = Range("A4:AV75617")
    Dim i As Long, s as string

    For i = 2 To UBound(data_set, 1)
        Dim sumall As Long
        Dim cnt As Long
        cnt = 0
        sumall = 0
        company_name_curperiod = data_set(i, 3)
        company_name_prevperiod = data_set(i - 1, 3)
        segments_curperiod = data_set(i, 10)
        segments_prevperiod = data_set(i - 1, 10)

        If company_name_curperiod = company_name_prevperiod And segments_curperiod <> segments_prevperiod Then
            stop
            s = data_set(i, 19)
            If IsNumeric(s) then MsgBox "Yes, it's a number"
            sumall = sumall + data_set(i, 19)
            cnt = cnt + 1
        End If
    Next i

    If cnt > 0 Then
        Sheets("Control").Range("K6") = sumall / cnt
    End If

    Application.ScreenUpdating = True
End Sub