Я очень неопытен с VBA и кодированием в целом.Поверните ячейку пустой, если все три соседние ячейки станут пустыми
Я работаю над таблицей, где столбец A
- это номера рабочих мест.
Столбец B
Даты.
Столбцы C
, D
и E
вы должны пометить знак в тексте E.G, который не имеет рисунка.
Теперь я выработал код поставить дату в столбце B
если знак ставится в C
, D
или E
. Однако если вы удалите C
, D
или E
, ячейка в столбце B
по-прежнему заполняется датой.
Просто чтобы быть ясно C
, D
или E
может иметь текст в них или на 2 или 1.
Теперь я знаю, что вы могли бы просто удалить ячейку, но где в этом удовольствие.
Вот код, который я имею до сих пор, не стесняйтесь предлагать способ уменьшить его или очистить, но в основном прочь разобраться с моей проблемой заранее.
Private Sub Worksheet_Change(ByVal Target As Range)
Call Macro1(Target)
Call Macro2(Target)
Call Macro3(Target)
End Sub
Sub Macro1(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("c2:c100")) Is Nothing Then
With Target(1, 0)
.Value = Date
.EntireColumn.AutoFit
End With
End If
End Sub
Sub Macro2(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("d2:d100")) Is Nothing Then
With Target(1, -1)
.Value = Date
.EntireColumn.AutoFit
End With
End If
End Sub
Sub Macro3(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("e2:e100")) Is Nothing Then
With Target(1, -2)
.Value = Date
.EntireColumn.AutoFit
End With
End If
End Sub
Я немного смущен, потому что похоже, что ваш существующий код очистит или добавит дату в столбец C, в то время как ваш вопрос относится к очистке или удалению из столбца B. –
1) Код OPs фактически _acts_ в столбце «B», поскольку 'Range ("C1") (1,0) .Address' возвращает '$ B $ 1 ", и так далее' Range (" D1 ") (1, -1) .Address 'и' Range (" E1 ") (1 , -2) .Address '. 2) Кроме того, я считал, что разрешение даты должно быть разрешено только в том случае, если все ячейки в столбцах C до E очищаются (даже если один за другим). 3) Наконец, я всегда переключаю приложение.EnableEvents' 'False', а затем вернуться к' True', чтобы избежать нежелательного (и, возможно, опасного) цикла. 4) Я тоже думал о явной ссылке на лист, но находясь в обработчике события «Worksheet_Change()», убедитесь, что «Active» лист является «Целевым» – user3598756
@ user3598756, вы, конечно, имеете право на адресацию. На 2, кто знает, я думаю, что вы можете быть правы, но это не ясно. На 3, хотя это хорошая практика, здесь нет необходимости, поскольку код реагирует на изменения в C на E, изменяя B. –