Что вызывает мое несоответствие типов и как я могу это исправить - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь сделать среднее, если расчет, но в 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 голосов
/ 20 октября 2019

Для отладки вашего кода запустите эту версию, и, когда код останавливается на строке «стоп», выполните шаг, чтобы увидеть, является ли 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
...