сведение всех компонентов к относительно простому на вид макросу

#excel #vba

#excel #vba

Вопрос:

Я пытаюсь выяснить, что на самом деле делает следующее:

 Sub ZoneTarget()
'
' Macro1 Macro
'

'
Dim myTarget As Variant

Sheets("Zones").Select

For i = 3 To 30
    myTarget = Cells(i, 20).Value
    If myTarget = "" Then
        Exit For
    End If
'    Application.CutCopyMode = False
'    Cells(i, 18).GoalSeek Goal:=myTarget, ChangingCell:=Cells(i, 8)
    If Cells(i, 21).Value < -0.05 / 100 Or Cells(i, 21).Value > 0.05 / 100 Then
        Cells(i, 8).Value = Round(Cells(i, 8).Value * (1   Cells(i, 21).Value), 6)
    End If
Next i

End Sub
  

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

Из того, что я могу сказать, должно произойти следующее:

На вкладке «Зоны» В строках С 3 по 30 в столбце 20 (T), но только до тех пор, пока строка, в которой столбец T, не будет пустой

Если столбец 21 (U) в указанных строках либо меньше -0.05, либо больше 0.05, то значение в столбце 8 (H) следует умножить на одно плюс значение в столбце 21 (U), это значение следует округлить

Я не уверен, чего мне здесь не хватает, но когда я запускаю макрос, он прерывается.

Будем признательны за любую помощь.

Комментарии:

1. either less than -0.05 or greater than 0.05 должно быть either less than -0.0005 or greater than 0.0005 . для обоих этих значений есть деление на 100. Также выполняйте, пока T не станет пустым

2. измените Sheets("Zones").Select на Sheets("Zones").Activate . Я бы использовал With Sheets("Zones") и изменил Cells на (точка) .Cells . Менее подвержен ошибкам в более сложном коде. Кроме того, Dim ws As Worksheet и Set ws = Worksheets("Zones") последующее использование ws.Cells( является требовательным, и у вас могут быть разные переменные для разных листов. Все зависит от того, насколько сложным будет код.

3. Какое сообщение об ошибке он выдает вам, когда он «ломается»?