Событие изменения формата для Excel VBA
Я пытаюсь помешать людям изменять (большую часть) моей электронной таблицы, в то же время позволяя им использовать функцию сортировки автофильтра. До сих пор я использовал событие Worksheet_Change и Application.Undo для автоматической отмены любых значений, введенных в ячейки, которые я не хочу изменять. Это прекрасно работает, за исключением того, что он не может обнаружить изменения в форматировании. Кто-нибудь знает средства для запуска события при изменении формата (цвет текста / фона) ячейки?
Спасибо!
2 ответа
Я нашел это довольно просто:
В этой рабочей книге:
Public Sub Workbook_Open()
Set SelectLast = Range("A1")
SelectVal = Range("A1").Value
SelectColor = Range("A1").Interior.Color
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
Dim LastVal As String
Dim LastColor As String
LastVal = ""
LastColor = ""
For i = 1 To SelectLast.Columns.Count
For y = 1 To SelectLast.Rows.Count
LastVal = LastVal & SelectLast.Cells(y, i).Value
LastColor = LastColor & SelectLast.Interior.Color
Next
Next
If ((LastVal <> SelectVal) Or (LastColor <> SelectColor)) Then MsgBox ("Something happend")
SelectVal = ""
SelectColor = ""
For i = 1 To Target.Columns.Count
For y = 1 To Target.Rows.Count
SelectVal = SelectVal & Target.Cells(y, i).Value
SelectColor = SelectColor & Target.Interior.Color
Next
Next
Set SelectLast = Target
End Sub
и в модуле 1
Global SelectLast As Excel.Range
Global SelectVal As String
Global SelectColor As String
Можно посмотреть что угодно с небольшими изменениями.
Ниже перечислены события, которыми вы ограничены на уровне рабочего листа:
Activate
BeforeDoubleClick
BeforeRightClick
Calculate
Change
Deactivate
FollowHyperLink
PivotTableUpdate
SelectionChange
Я полагаю, вы могли бы попробовать что-то на событии SelectionChange. Если кто-то изменит форматирование ячейки, а затем переместится в другую ячейку, это событие будет вызвано.
Независимо от того, какой код у вас есть в этой области, будет постоянно вызываться, поэтому было бы неплохо предвосхитить все, что вы делаете, с помощью нескольких быстрых проверок, чтобы убедиться, что ячейки находятся в определенном диапазоне, имеют данные и т. Д. Ваш лист может стать довольно вялым в противном случае, когда пользователи переходят из одной клетки в другую