Excel VBA, если значение = 0, тогда не ищите цели

#vba #excel #macros

#vba #excel #макросы

Вопрос:

Привет, я новичок в vba и весь день искал способ заставить это работать. В любом случае мне нужен мой макрос GoalSeek, чтобы воздействовать на все ячейки в столбце «EW», чтобы скорректировать значение EP, когда соседняя ячейка в «EX»> 0, и оставить пустым или изменить значение на 0, если значение соседней ячейки в «EX» = 0. Столбцы «EP» «EW» и «EX» влияют на значение друг друга. Ниже приведен мой код, который я собрал вместе. Я получаю ошибку компиляции: блок, если без конца, если

Спасибо за любую помощь

     Private Sub CommandButton1_Click()

Dim StartTime As Double
Dim MinutesElapsed As String

'Remember time when macro starts
  StartTime = Timer


Dim lr As Long
Dim cell As Variant


Application.DisplayAlerts = False
Application.ScreenUpdating = False

    Range("A9").Select
        lr = Cells.Find("*", SearchORder:=xlByRows, SearchDirection:=xlPrevious).Row

For j = 9 To lr
   If Cells(j, "EX").Value > 0 Then
           Cells(j, "EP").GoalSeek Goal:=60, ChangingCell:=Cells(j, "EW")
               For Each cell In Range("EW9:EW" amp; lr)
                    cell.Value = WorksheetFunction.Round(cell.Value, 0)
                        Next cell

        Application.DisplayAlerts = True
Application.ScreenUpdating = True
'Determine how many seconds code took to run
  MinutesElapsed = Format((Timer - StartTime) / 86400, "hh:mm:ss")

'Notify user in seconds
  MsgBox "This code ran successfully in " amp; MinutesElapsed amp; " minutes", vbInformation


End Sub
  

Ответ №1:

Перед текстом

 Application.DisplayAlerts = True
Application.ScreenUpdating = True
  

вам нужно написать:

 end if
next j
  

Таким образом, это должно выглядеть так:

 Next cell
end if
next j
Application.DisplayAlerts = True
Application.ScreenUpdating = True
  

Ответ №2:

Как говорится в сообщении об ошибке, у вас нет End If в конце If блока. Если я вас понял, это должно быть после cell цикла. Вам также нужно указать Next j , чтобы показать программе, где завершить итерацию j цикла.

 Private Sub CommandButton1_Click()

Dim StartTime As Double
Dim MinutesElapsed As String
Dim lr As Long
Dim cell As Variant

'Remember time when macro starts
StartTime = Timer

Application.DisplayAlerts = False
Application.ScreenUpdating = False

Range("A9").Select
lr = Cells.Find("*", SearchORder:=xlByRows, SearchDirection:=xlPrevious).Row

For j = 9 To lr
    If Cells(j, "EX").Value > 0 Then
        Cells(j, "EP").GoalSeek Goal:=60, ChangingCell:=Cells(j, "EW")
        For Each cell In Range("EW9:EW" amp; lr)
            cell.Value = WorksheetFunction.Round(cell.Value, 0)
        Next cell
    End If
Next j

Application.DisplayAlerts = True
Application.ScreenUpdating = True
'Determine how many seconds code took to run
MinutesElapsed = Format((Timer - StartTime) / 86400, "hh:mm:ss")

'Notify user in seconds
MsgBox "This code ran successfully in " amp; MinutesElapsed amp; " minutes", vbInformation


End Sub