Для создания этого компилятора потребовалось много изменений. Добавление 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)