Как выделить только последний отредактированный ряд? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть таблица данных о клиентах в Excel, которую можно добавлять / редактировать с помощью пользовательской формы VBA.Поэтому я хотел бы выделить строку, которая была только что добавлена ​​/ отредактирована.Я впервые использую VBA, поэтому я искал и нашел код здесь :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Value <> "" Then
        Target.Interior.ColorIndex = 6
    End If
End Sub

, который прекрасно работает, но основные моменты для предыдущих изменений / надстроек все еще там.Я просто хочу, чтобы последний был выделен.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Вот код, который может работать для вас:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

'Removing old conditional formatting if it exists already
Conditions = ActiveSheet.Cells.FormatConditions.Count
For i = 1 to Conditions
    If ActiveSheet.Cells.FormatConditions(i).Type = 2 Then
        If ActiveSheet.Cells.FormatConditions(i).Formula1 = "=1" Then ActiveSheet.Cells.FormatConditions(i).Delete
    End If
Next i

'Adding new conditional formatting rule to the edited range
Target.EntireRow.FormatConditions.Add Type:=xlExpression, Formula1:="=1"
Target.EntireRow.FormatConditions(1).Interior.ColorIndex = 6

End Sub

В настоящее время он будет подсвечивать все последние отредактированные строки на всех листах.Не уверен, что это именно то, что вы хотели.

  • Он сохранит цветные ячейки на вашем листе без изменений при изменении нового диапазона.
  • Он сохранит другие правила условного форматирования без изменений.
  • Подсвечивает последний отредактированный диапазон, даже если диапазон был очищен!
0 голосов
/ 18 февраля 2019

Используйте переменную.Сохраняйте диапазон в этом, когда вы меняете цвет.В следующий раз удалите цвет из этого диапазона.

Это то, что вы пытаетесь?

Dim prevRng As Range

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim aCell As Range

    If Not prevRng Is Nothing Then prevRng.Interior.ColorIndex = xlNone
    Set prevRng = Target

    For Each aCell In Target
        If aCell.Value <> "" Then aCell.Interior.ColorIndex = 6
    Next aCell
End Sub

Это будет обрабатывать несколько ячеек, как @ Pᴇʜ, упомянутое в комментарии.

...