Evento de alteração de formato para o Excel VBA

2

Estou tentando impedir que as pessoas modifiquem (a maioria) da minha planilha enquanto ainda permitem que elas usem a função de classificação do AutoFiltro. O que eu fiz até agora é usado o evento Worksheet_Change e Application.Undo para desfazer automaticamente todos os valores inseridos em células que eu não quero ser modificado. Isso funciona muito bem, exceto que não pode detectar alterações na formatação. Alguém sabe de um meio de acionar um evento quando o formato (texto / cor de fundo) de uma célula é alterado?

Obrigado!

    
por The_Third 06.08.2010 / 22:13

2 respostas

0

Os eventos aos quais você está limitado no nível da planilha são os seguintes:

Activate
BeforeDoubleClick
BeforeRightClick
Calculate
Change
Deactivate
FollowHyperLink
PivotTableUpdate
SelectionChange

Suponho que você poderia tentar algo no evento SelectionChange. Se alguém alterar a formatação de uma célula e depois mudar para uma célula diferente, esse evento será chamado.

Qualquer que seja o código que você tenha nessa área será constantemente chamado, então seria uma boa idéia começar o que você fizer com algumas verificações rápidas para ter certeza de que as células estão em um determinado intervalo, dados, etc. ficar bastante lento, caso contrário, os usuários mudam de uma célula para outra.

    
por 09.08.2010 / 14:53
-1

eu achei bem simples:

No ThisWorkbook:

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

e no módulo 1

Global SelectLast As Excel.Range
Global SelectVal As String
Global SelectColor As String

É possível assistir a qualquer coisa com pequenas modificações.

    
por 15.02.2014 / 09:46