Если цвет интерьера activecell изменится, то - PullRequest
0 голосов
/ 14 ноября 2018

Я хочу следующий код VBA:

Если цвет внутренней части activecell изменится на colorindex 44, я хочу, чтобы в ячейке пять столбцов справа был текст «Готово» и сегодняшняя дата.

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

Private Sub Worksheet_SelectionChange  (ByVal Target As Range)

   If ActiveCell.Offset(0, -1).Interior.ColorIndex = 44 Then
        ActiveCell.Offset(0, 4) = "Done" & Date
   End If

End Sub

1 Ответ

0 голосов
/ 14 ноября 2018

Вы должны использовать Target вместо ActiveCell

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Interior.ColorIndex = 44 Then
        Target.Offset(ColumnOffset:=4).Value = "Done " & Date
    End If
End Sub

Обратите внимание, что это не может проверить, был ли цвет изменен или нет, поскольку для этого нет события.Вы можете только проверить, если фактический индекс цвета равен 44. Но чтобы предотвратить перезапись даты «изменения», вы можете просто проверить, существует ли уже дата.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Rows.Count + Target.Columns.Count > 2 Then Exit Sub 'exit if more than one cell is selected

    If Target.Interior.ColorIndex = 44 And Not Left$(Target.Offset(ColumnOffset:=4).Value, 4) = "Done" Then
        Target.Offset(ColumnOffset:=4).Value = "Done " & Date
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...