2

Я пытаюсь помешать людям изменять (большую часть) моей электронной таблицы, в то же время позволяя им использовать функцию сортировки автофильтра. До сих пор я использовал событие Worksheet_Change и приложение.Отменить, чтобы автоматически отменить любые значения, введенные в ячейки, которые я не хочу изменять. Это прекрасно работает, за исключением того, что он не может обнаружить изменения в форматировании. Кто-нибудь знает средства для запуска события, когда изменяется формат (цвет текста / фона) ячейки?

Спасибо!

2 ответа2

0

Ниже перечислены события, которыми вы ограничены на уровне рабочего листа:

Activate
BeforeDoubleClick
BeforeRightClick
Calculate
Change
Deactivate
FollowHyperLink
PivotTableUpdate
SelectionChange

Я полагаю, вы могли бы попробовать что-то на событии SelectionChange. Если кто-то изменит форматирование ячейки, а затем переместится в другую ячейку, будет вызвано это событие.

Какой бы код у вас не находился в этой области, он будет постоянно вызываться, поэтому было бы неплохо предварять все, что вы делаете, быстрой проверкой, чтобы убедиться, что ячейки находятся в определенном диапазоне, имеют данные и т.д. В противном случае ваш лист может стать довольно вялым, когда пользователи переходят из одной клетки в другую.

-1

Я нашел это довольно просто:

В этой рабочей книге:

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

Можно посмотреть что угодно с небольшими изменениями.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .