Почему я получаю эту проблему, если заявление? - PullRequest
2 голосов
/ 12 февраля 2020

Я получаю сообщение об ошибке «End If Without Block If» в VBA. Followin - мой код Может ли кто-нибудь помочь мне узнать, какую ошибку я совершаю?

Function ProjectedProductionPlan(Coverage As Double, Sales As Variant, ProjectedStock As Double) As Double
    Dim count As Integer
    Dim ResidualBalance As Double
    Dim ProjectedPlan As Double
    Dim k As Integer
    Dim x As Integer
    Dim y As Single
    Dim s As Single

    count = Sales.count
    s = 0
    ResidualBalance = ProjectedStock
    i = 1
        If Coverage < 1 Then
            ProjectedPlan = (Sales(i) * Coverage) - ResidualBalance
          ElseIf Coverage = 1 Then
            ProjectedPlan = Sales(i) - ResidualBalance
          Else
            For k = 1 To count
                 Do Until k - Coverage > 0
                        x = k
                        y = Coverage - x
                        s = Sales(k) + s
                 Loop
            Exit For
        End If
            ProjectedPlan = s + (Sales(x + 1) * y)

End Function

1 Ответ

2 голосов
/ 12 февраля 2020

Согласно моему комментарию:

Чтобы избавиться от ошибки компиляции, вам нужно изменить Exit For на Next, чтобы создать фактическую итерацию, тогда как Exit For - это просто выражение в пределах l oop до Выход l oop. Здесь - это MS-документация по циклам For...Next.

Однако вы также используете Do Until...Loop. Как я вижу в вашем коде, исправление вышеизложенного немедленно привело бы к бесконечному l oop, поскольку ни одна переменная (ни k, ни coverage) не была настроена. Поэтому я бы предложил включить в ваш For...Next l oop оператор IF. Например, вот так:

For k = 1 To count
    If k - Coverage > 0 Then
        Exit For
    Else
        x = k
        y = Coverage - x
        s = Sales(k) + s
    End If
Next

Я не проверил остальную часть вашего кода, чтобы убедиться, что это действительно то, что вам нужно.

Small sidenote: использование Integer переменных типа данных может укусить вас только в одном месте. Вместо этого используйте Long.

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