customize excel 2010 destaque alterações de faixa

1

Existe alguma maneira de personalizar a forma como o Excel destaca as células em acompanhar as alterações? Meu cliente nos pediu para "destacar tudo o que você alterou alterando a cor do texto para vermelho" e gostaríamos de implementar isso. Atualmente estou procurando uma maneira de fazer isso com o VBA, e meu pensamento é:

if (current cell has changed) and (changed has NOT been approved) then
    set color of current cell = red
else 
    remove color of current cell. 
end if  

Qualquer sugestão é apreciada!

    
por Luke 19.05.2012 / 06:10

1 resposta

4

Você pode fazer isso com um evento de alteração de planilha no VBA. Comecei a criar um exemplo simples para você, mas percebi que seu cliente provavelmente desejará poder reverter qualquer destaque depois de verificar suas alterações. Então, decidi fazer um modelo inteiro de trabalho que faz tudo. Aqui estão os passos que você precisa seguir:

Pressione Alt + F11 para abrir o editor de VBA no Excel. No Pesquisador de objetos (no lado esquerdo da janela do VBA), clique duas vezes em uma folha que você estará editando. Cole o seguinte código no campo de texto que é aberto.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim ws As Worksheet, ws2 As Worksheet
Dim i As Boolean
Application.ScreenUpdating = False

'Create Change Log if one does not exist.
i = False
For Each ws In ThisWorkbook.Worksheets
    If ws.Name = "Change Log" Then
        i = True
        Exit For
    End If
Next ws
If Not i Then
   Set ws2 = ThisWorkbook.Worksheets.Add
   ws2.Visible = xlSheetHidden
   ws2.Name = "Change Log"
   ws2.Range("A1") = "Sheet"
   ws2.Range("B1") = "Range"
   ws2.Range("C1") = "Old Text Color"
Else
   Set ws2 = Sheets("Change Log")
End If

'Store previous color data in change log for rollback.
ws2.Range("A1").Offset(ws2.UsedRange.Rows.Count, 0) = Target.Worksheet.Name
ws2.Range("B1").Offset(ws2.UsedRange.Rows.Count - 1, 0) = Target.Address
ws2.Range("C1").Offset(ws2.UsedRange.Rows.Count - 1, 0) = Target.Font.Color

'Change font color to red.
Target.Font.Color = 255

Application.ScreenUpdating = True
End Sub

Este código alterará a cor da fonte para vermelho de qualquer célula que você editar o valor. Ele não alterará a cor da fonte se você alterar apenas o formato de uma célula. Além disso, não irá alterar automaticamente a cor da fonte das células dependentes. O último poderia ser feito, mas deixarei isso para você se você quiser esse comportamento.

Esse código também cria uma folha de registro de alterações oculta e registra o endereço e a cor da fonte original da célula que foi alterada.

Observe que esse código só funciona para alterações nessa planilha específica. Se você quiser acompanhar as alterações em toda a pasta de trabalho, poderá colar esse mesmo código no módulo da planilha para cada planilha.

O código para reverter qualquer destaque deve ser colocado em um módulo separado. No editor do VBA, vá para Inserir > > Módulo. Cole o seguinte código no novo módulo.

Sub rollbackHILITE()

Dim sht As Worksheet, cl As Worksheet
Dim j As Long, roll() As Variant
Dim del As Integer
Application.ScreenUpdating = False

'Find Change Log.  If it doesn't exist, user is prompted and exits sub.
For Each sht In ThisWorkbook.Worksheets
    If sht.Name = "Change Log" Then
        Set cl = sht
        Exit For
    End If
Next sht
If cl Is Nothing Then
    MsgBox "Change Log not found!"
    Exit Sub
End If

'Return font colors to original form by stepping backward through change log.
If cl.UsedRange.Rows.Count > 1 Then
    roll = cl.Range("A2:C2").Resize(cl.UsedRange.Rows.Count - 1, 3)
    For j = UBound(roll, 1) To 1 Step -1
        Set sht = Sheets(roll(j, 1))
        sht.Range(roll(j, 2)).Font.Color = roll(j, 3)
    Next j
End If
Application.ScreenUpdating = True

'Prompt User to keep or delete change log after rollback.
del = MsgBox("Delete Change Log?", vbOKCancel, "Finish Rollback")
If del = 1 Then
    cl.Delete
End If

End Sub

Esse código pode ser executado no menu Macros no Excel. Ele simplesmente reverte a cor da fonte das células destacadas de volta para as cores originais e, em seguida, exclui o log de alterações se o usuário clicar em OK.

    
por 21.05.2012 / 22:51