#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