Ir ao conteúdo

Posts recomendados

Postado

Bom dia,

 

Estive enfrentando um problema no escritório na última semana.

Montei uma planilha no intervalo C3:CM600, onde cada natureza de informação equivale a uma coluna (Ex.: Descrição, Valor, etc.)

Estabeleci as condições de cores, sendo que toda a planilha está pintada de preto. Caso eu preencha as primeiras colunas com as condições necessárias, o restante da linha referente a essas informações deixa de ser preta e passa a ser branca, ou seja, habilitada para preenchimento.

 

Até aí tudo bem. Porém gostaria de bloquear toda célula nesse intervalo que esteja com o fundo preto (desabilitada). Caso as informações necessárias sejam preenchidas, as células ficariam brancas e a proteção seria retirada apenas nessas células.

 

Alguém pode me ajudar?

Formulário Materiais.xlsm

Postado

@Akinowfx seja bem vindo a bordo !

As celulas são "pintadas" manualmente ou por formatacao condicional? 

O ideal seria ve. enviar sua planilha ou um exemplo com alguns dados ficticios, para melhor entendimento.

Postado

Obtive o seguinte código de um outro forum:

 

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("C3:CM600")) Is Nothing Then
        Dim c As Range
        Me.Unprotect "suaSenhaAqui"
        Application.EnableEvents = False
        For Each c In Me.Range("C3:CM600")
            If c.Interior.ColorIndex = 1 Then
                c.Locked = True
            Else
                c.Locked = False
            End If
        Next c
        Application.EnableEvents = True
        Me.Protect "suaSenhaAqui"
    End If
End Sub

 

Testei o código e deduzi que o Excel não considera as células via formatação condicional como pretas, mesmo que visualmente estejam pretas. Deve haver uma fórmula de parametrizar a cor CONDICIONAL preta nas células para fazer esse código funcionar.

Postado

@Basole Basole, deu certo!

O código está funcionando com perfeição. Muito obrigado!

Obtive, porém, um problema. Creio que, devido à complexidade do código e ao tamanho do intervalo, sempre que digito algo numa célula a planilha trava por uns 10 segundos para executar o código e estar operante novamente.

 

Há algo que eu possa fazer para agilizar?

  • Curtir 1
Postado

@Akinowfx tente: insirr  o " Application.ScreenUpdating = False" no inicio do codigo,  e  Application.ScreenUpdating = True no final

Ficando assim : 

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("C3:CM600")) Is Nothing Then
        Dim c As Range
        
        Application.ScreenUpdating = False
        
        Me.Unprotect "suaSenhaAqui"
        Application.EnableEvents = False
        For Each c In Me.Range("C3:CM600")
            If c.Interior.ColorIndex = 1 Then
                c.Locked = True
            Else
                c.Locked = False
            End If
        Next c
        Application.EnableEvents = True
        Me.Protect "suaSenhaAqui"
        
         Application.ScreenUpdating = True
         
    End If
End Sub

 

Visitante
Este tópico está impedido de receber novas respostas.

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!