Ir ao conteúdo
  • Cadastre-se

Excel Mudar cor da célula ao receber foco


Ir à solução Resolvido por Basole,

Posts recomendados

Boa noite galera,

Tô aqui me batendo com uma formula. Estou usando esse código abaixo pra que mude a cor da célula ao receber o foco, mas ele só altera ao ser clicado. Gostaria que alguém me ajude com um código que altere a cor da célula ao receber o foco e não ao ser clicado.

 

Código que estou usando:

 

Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
Sheets("Geral").Unprotect "0"
'Update 20140923
Static xLastRng As Range
On Error Resume Next
On Error Resume Next
Target.Interior.ColorIndex = 2
xLastRng.Interior.ColorIndex = 36
Set xLastRng = Target
Sheets("Geral").Protect "0"
End Sub

 

De já meus agradecimentos a quem me ajudar

 

Paulo Cezar

Link para o comentário
Compartilhar em outros sites

@paulocezarpicos as celulas do Excel não tem o recurso de passar o mouse sobre, e executar uma ação. Acho que é isso que está se referindo ao dizer: receber o foco.

Apenas os componentes Active-x (textbox, label, combobox, frame, etc),  tem este recurso.

Nas celulas somente ao selecionar, o proprio nome do evento do exemplo que voce postou diz: SheetSelectionChange.

 

 

   

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Veja se é isso que precisa:

 

* Cole o código abaixo, no modulo planilha "Geral"

 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static rngcolor As Range
    Static OldColor As Variant
    Dim rw As Long, cl As Long
    
  Sheets("Geral").Unprotect "0"
    If Not rngcolor Is Nothing Then
        If IsArray(OldColor) Then
            On Error GoTo NoRestore
            For rw = 1 To rngcolor.Rows.Count
                For cl = 1 To rngcolor.Columns.Count
                    If IsEmpty(OldColor(rw, cl)) Then
                        rngcolor.Cells(rw, cl).Interior.ColorIndex = xlNone
                    Else
                        rngcolor.Cells(rw, cl).Interior.Color = OldColor(rw, cl)
                    End If
                Next
            Next
            On Error GoTo 0
        Else
            If IsEmpty(OldColor) Then
                rngcolor.Interior.ColorIndex = xlNone
            Else
                rngcolor.Interior.Color = OldColor
            End If
        End If
    End If
NoRestore:
    On Error GoTo 0

    Set rngcolor = Target
    ReDim OldColor(1 To Target.Rows.Count, 1 To Target.Columns.Count)
    For rw = 1 To Target.Rows.Count
        For cl = 1 To Target.Columns.Count
            If Target.Cells(rw, cl).Interior.ColorIndex = xlNone Then
                OldColor(rw, cl) = Empty
            Else
                OldColor(rw, cl) = Target.Cells(rw, cl).Interior.Color
            End If
        Next
    Next
    rngcolor.Interior.Color = -4142
    Sheets("Geral").Protect "0"
End Sub

 

adaptado de: Change Cell color...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Meu amigo  Basole a quanto tempo!!!!

 

Seus códigos como sempre num nível tão alto que eu como iniciante não entendo nada.

A macro está rodando exatamente como eu queria, isto é, quando recebe o foco a célula fica branca e quando sai o foco a célula volta a cor anterior. Só que isto está acontecendo em qualquer parte da planilha, menos nos campos onde vou inserir as informações.

 

Em anexo a planilha

Orçamento Kit Solar.zip

Link para o comentário
Compartilhar em outros sites

Pois é..... Com o outro código estava tudo perfeito, só que quando eu usava uma macro de limpar campos, quando o cursor parava na primeira célula num ficava branca, ficava da cor do resto da planilha e eu quero que fique na cor branca, pois o cursor para nessa célula (B7:G7)

Link para o comentário
Compartilhar em outros sites

  • Solução

@paulocezarpicos beleza segue o código com as alterações.

 

Abrx.

 

Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)

If ActiveSheet.Name <> "Geral" Then Exit Sub

Sheets("Geral").Unprotect "0"
Static xLastRng As Range
On Error Resume Next
On Error Resume Next

If Not Application.Intersect(taget, Range("B7:G7,B9:D9,F9:G9,B11:C11," & _
                            "E11:F11,G11,A14:D14,E14:G14")) Is Nothing Then
                            
Application.EnableEvents = False
Target.Interior.ColorIndex = 2
xLastRng.Interior.ColorIndex = 36
Set xLastRng = Target
Sheets("Geral").Protect "0"
Application.EnableEvents = True
End If
On Error GoTo 0

End Sub

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!