Ошибка компиляции VBA 1004 - PullRequest
0 голосов
/ 05 июля 2018

Я новичок в VBA, поэтому я прошу прощения, если ошибка здесь очевидна, но я получаю ошибку времени выполнения в следующем коде, и я не понимаю, почему, Моя единственная мысль - это переменная StepCount, используемая в первом цикле for получает его значение, назначенное в самом цикле for, который я не вижу, как поместить его раньше, поскольку он основан на x, используемом для цикла for? не уверен, как связать их так, чтобы это работало

Sub EST()

'Constants
Dim W2P As Integer
W2P = 4.2
Dim WPA As Integer
WPA = 20
Dim AKPA As Integer
AKPA = 5
Dim AKMan As Integer
AKMan = 10
Dim AKP As Integer
AKP = 4


'looping through orders
For x = 2 To 700 Step StepCount

Dim OrderNum As Integer
OrderNum = Cells(x, A).Value

'each order has sub rows loop steps unique amount each cycle
StepCount = Cells(x, BB).Value

'each order has unique number of these sub rows
Dim LineNum As Integer
LineNum = Cells(x, BA).Value

Dim Sum As Integer
Sum = 0

    'for loop supossed to perform function on each orders data
    For i = (x + 1) To (LineNum)

        Dim Ti As Integer
        Ti = 0

        Dim ItemClass As String
        ItemClass = Cells((x + 1), s).Value

        Dim QTY As Integer
        QTY = Cells((x + 1), P).Value

        Dim MAN As Integer
        MAN = Cells((x + 1), Q).Value

        Select Case ItemClass

            'Case AF

            Case AK

                If MAN = 1 Then
                    Ti = (AKP + AKMan * QTY + AKPA * QTY)
                End If

                If MAN = 0 Then
                    Ti = (AKP + AKPA * QTY)
                End If

        End Select

        Sum = Sum + Ti
       Set Cells(x, AX).Value = Sum
    Next
Next x
End Sub

1 Ответ

0 голосов
/ 05 июля 2018

Для создания этого компилятора потребовалось много изменений. Добавление Option Explicit точно скажет вам, где находятся все ваши ошибки компиляции, когда вы пытаетесь запустить. Как только вы решите их, вы можете начать отлаживать ошибки времени выполнения (или логические ошибки).


1) При использовании Cells вы можете ссылаться на столбцы по индексу или «букве» (Cells(2, 1) или Cells(2, "A"))
2) у вас было несколько переменных, не определенных
3) Нет необходимости в 2 If операторах, просто объедините их, используя ElseIf
4) Вы можете избавиться от метода Select Case и использовать оба ваших критерия в одном выражении If (If MAN = 1 And ItemClass = "AK" Then)
5) Убедитесь, что вы используете правильные переменные. Каждая переменная имеет ограничения на то, что она может и не может хранить. Например, Integer не может содержать 4.2 (Ваша переменная WPA была бы молча преобразована в 4, чтобы соответствовать объявленной вами переменной)
6) Вы должны квалифицировать свои экземпляры Cells на рабочем листе.

Это может по-прежнему вызывать ошибки времени выполнения , но теперь оно будет компилировать .

Option Explicit
Sub EST()

Dim WPA as Double, AKPA as Integer, AKMan as Integer, AKP As Integer
Dim W2P As Variant
W2P = 4.2
WPA = 20
AKPA = 5
AKMan = 10
AKP = 4

Dim x as Long, i as Long, StepCount As Long
Dim OrderNum, LineNum, Sum, Ti, QTY, MAN As Variant
Dim ItemClass As String

For x = 2 To 700 Step StepCount
    StepCount = Cells(x, "BB").Value
    OrderNum = Cells(x, "A").Value
    LineNum = Cells(x, "BA").Value
    Sum = 0

    For i = (x + 1) To (LineNum)
        Ti = 0
        ItemClass = Cells((x + 1), "S").Value
        QTY = Cells((x + 1), "P").Value
        MAN = Cells((x + 1), "Q").Value
            If MAN = 1 And ItemClass = "AK" Then
                Ti = (AKP + AKMan * QTY + AKPA * QTY)
            ElseIf MAN = 0 And ItemClass = "AK" Then
                Ti = (AKP + AKPA * QTY)
            End If
        Sum = Sum + Ti
        Cells(x, "AX").Value = Sum
    Next i
Next x

End Sub

1 & 2 были бы пойманы Option Explicit
3 и 4 больше предложений
5 и 6 дополнены полезными комментариями других (Craner & Guindon)

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