Ваш код должен выглядеть так:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Application.Intersect(Range("D2:L102"), Range(Target.Address)) Is Nothing Then
Call SampleMacro
End If
Application.EnableEvents = True
End Sub
Вы делаете это, чтобы SampleMacro
не вызывал снова событие Worksheet_Change
.
Отредактировано:
Чтобы избежать повторного заполнения уже заполненных ячеек, вам нужно нацелиться на строку, которую вы изменили следующим образом:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Application.Intersect(Range("D2:L102"), Range(Target.Address)) Is Nothing Then
Call SampleMacro(Target.Row)
End If
Application.EnableEvents = True
End Sub
Это должен быть код на объекте листа. Как видите, я включаю переменную Target.Row
в SampleMacro
, поэтому код проверяет только строку, в которой была изменена ваша ячейка.
Option Explicit
Sub SampleMacro(i As Long)
' Get the last row
Dim Sheet3 As Worksheet
Dim j As Integer
Set Sheet3 = ThisWorkbook.Sheets("BBDD") 'whatever is called your sheet
With Sheet3
For j = 4 To 12 'For columns D to J
Select Case .Cells(i, j)
Case "Nee" 'If the cells says "Nee"
Select Case j 'depending on the column number
Case 4 'Column D
.Cells(i, "O") = "? Er wordt in de cookie policy niet uitgelegd wat cookies zijn."
Case 5 'Column E
Case 6 'Column F
Case 7 'Column G
Case 8 'Column H
Case 9 'Column I
Case 10 'Column J
Case 11 'Column K
Case 12 'Column L
End Select
Case "Matig" 'If the cells says "Matig"
Select Case j 'depending on the column number
Case 4 'Column D
.Cells(i, "O") = "? Er wordt in de cookie policy matig uitgelegd wat cookies zijn."
Case 5 'Column E
Case 6 'Column F
Case 7 'Column G
Case 8 'Column H
Case 9 'Column I
Case 10 'Column J
Case 11 'Column K
Case 12 'Column L
End Select
Next j
End With
End Sub
Я не закончил весь код, но я надеюсь, что вы понимаете, как это закончить. Select Case
более читабелен в этом случае, я перебираю столбцы с D по L, используя переменную j
, и один случай выбора проверяет, что находится внутри ячейки "Nee"
или "Matig"
, и в зависимости от того, какой из них затем другой Select Case
, который проверяет номер столбца. При этом ваш код будет выглядеть чище и легче для чтения.