Как исправить 'End if без блока if', если есть только 1 if и 1 end if? - PullRequest
0 голосов
/ 06 мая 2019

Если у меня есть оператор if между оператором For Each, то это повлияет на то, где мне нужно разместить свое «конечное if» и на сколько я использую операторов end if?если и добавив еще, но никто не поможет.

Sheets("Arrivals").Select

Dim cel As Range
Dim unit As Range

ParcelCount = Range("BW8").Value
LowerParcelCount = Range("BW5").Value
ThresholdCount = 0

For Each cel In Range("BQ3:BQ78")
    If cel.Value > LowerParcelCount Then
        For Each unit In Range("C3:C78")
            ThresholdCount = ThresholdCount + unit.Value
    End If
Next cel
Next unit

Range("BS16") = ThresholdCount

Я ожидаю запуска кода.Если значение ячейки в диапазоне BQ3: BQ78 соответствует критериям, значение вызова в диапазоне C3: C78 следует суммировать с пустой переменной ThresholdCount.

1 Ответ

5 голосов
/ 06 мая 2019

Вы пропустили следующую строчку:

Option Explicit
Sub Test()

    Sheets("Arrivals").Select

    Dim cel As Range
    Dim unit As Range

    ParcelCount = Range("BW8").Value
    LowerParcelCount = Range("BW5").Value
    ThresholdCount = 0

    For Each cel In Range("BQ3:BQ78")
        If cel.Value > LowerParcelCount Then
            For Each unit In Range("C3:C78")
                ThresholdCount = ThresholdCount + unit.Value
            Next unit
        End If
    Next cel

    Range("BS16") = ThresholdCount


End Sub

Также вы должны научиться делать отступ для своего кода, избегайте использования .Select и объявляйте все свои переменные, используя Option Explicit

ЗдесьВаш код должен выглядеть следующим образом:

Option Explicit
Sub Test()

    Dim ws As Worksheet 'declare your worksheets

    Set ws = ThisWorkbook.Sheets("Arrivals") 'like this you will refer to it using ws

    Dim cel As Range, unit As Range
    Dim ParcelCount As Long, LowerParcelCount As Long, ThresholdCount As Long

    With ws 'you could also use With ThisWorkbook.Sheets("Arrivals") if you are not using that sheet anymore
        ParcelCount = .Range("BW8").Value
        LowerParcelCount = .Range("BW5").Value
        ThresholdCount = 0

        For Each cel In .Range("BQ3:BQ78")
            If cel.Value > LowerParcelCount Then
                For Each unit In .Range("C3:C78")
                    ThresholdCount = ThresholdCount + unit.Value
                Next unit
            End If
        Next cel
        .Range("BS16") = ThresholdCount
    End With

End Sub

Как видите, нет необходимости выбирать прибытия листа, так как мы объявили его сверху и используем его ссылку все время, потому что все внутриWith ws

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...