Ir ao conteúdo
  • Cadastre-se

Bloquear Célula sem travar Macro


Ir à solução Resolvido por minoso,

Posts recomendados

Boa Tarde Gente....

tenho um probleminha e uma duvida....criei um Macro e quero bloquear a celula onde ele realiza as alterações.Mas quando faço isso, dá erro.Tem como bloquear a coluna sem travar o macro?

 

Primeiro a sua macro precisa desproteger a planilha, já que o final dela vai bloqueá-la (protegê-la).

 

No início da sua macro, insira a linha ActiveSheet.Unprotect

 

Depois, no momento em que estiver terminando a macro e quiser bloquear a coluna em questão, insira as linhas abaixo (usei a coluna G como exemplo).

    Columns("G:G").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
 
Espero ter lhe ajudado!
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Mais uma vez obrigado pela força @minoso

 

To usando a Macro... aonde eu colocaria? Porque ela desativou e deu erro...ai me perdi... :confused:

 

Quero bloquear as colunas B e C......

 

Private Sub Worksheet_Change(ByVal Target As Range)

 

Application.ScreenUpdating = False

 

Dim KeyCells As Range

Dim L As Integer

 

Set KeyCells = Range("C3:C9250")

 

If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then

L = Target.Row

Cells(L, "B").Value = Format(Date, "ddmmYYYY") & Format(Time, "hhmmss")

Application.ScreenUpdating = True

 

End If

End Sub

 

Thanks  :D
Link para o comentário
Compartilhar em outros sites

@Roronoa Zero

 

Opa! Vamos lá.

 

Com base no código que você postou, as linhas adicionais que eu sugeri devem estar assim

 

ActiveSheet.Unprotect

  • Insira logo abaixo ao declarar as variáveis (Dim)

 

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
  • Insira antes de fechar a sub

Lembre-se que, por padrão, o Excel mantém todas as células com a propriedade de segurança bloqueada. Para o que a macro está fazendo funcionar de acordo com o que você deseja, antes de executá-la você precisa selecionar todas as células da sua planilha, clicar com o botão direito do mouse, selecionar a opção Propriedades e na aba Proteção desmarque a opção Bloqueadas. Depois selecione apenas as colunas que quer bloquear com a macro, no caso a coluna B e a C, clique com o botão direito do mouse, propriedades, proteção e marque a opção Bloqueadas.

 

Esse procedimento se faz necessário para que quando a macro seja executada e bloqueie a planilha, o Excel bloqueará apenas as células que você manteve o flag 'bloqueada' marcado.

 

Espero ter lhe ajudado ;)

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

@minoso

 

Ficaria assim?

 

Private Sub Worksheet_Change(ByVal Target As Range)
 
Application.ScreenUpdating = False
 
Dim KeyCells As Range
Dim L As Integer
 
ActiveSheet.Unprotect
 
Set KeyCells = Range("C3:C9250")
 
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
L = Target.Row
Cells(L, "B").Value = Format(Date, "ddmmYYYY") & Format(Time, "hhmmss")
Application.ScreenUpdating = True
 
End If
 
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
 
End Sub
 
Porque coloque antes do END IF  e no meio como esta agora...e ele pede senha para ativar a macro....
mas eu quero colocar a senha para que a pessoa não possa alterar as colunas " B e C" mas só possa clicar nos botões para ativar o macro.
 
Obrigado novamente por me dar parte do seu tempo nesta ajuda  :D
Link para o comentário
Compartilhar em outros sites

Puts, esqueci do detalhe da senha, me desculpe.

 

Na linha que você inseriu, acrescente lá no final a propriedade Password := ""

 

Ficando assim

 

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password := ""

 

Outra coisa que esquecemos, o botão que aciona a macro também deve estar com o flag de bloqueado ativo. Clique com o botão direito do mouse sobre ele, vá em propriedades e então na aba Proteção, desmarque a opção Bloqueada.

 

Teste e retorne.

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

@minoso

 

Deu erro ainda...eu devo ter um parafuso a menos ou to fazendo algo errado....  :muro: :muro: :muro: :muro: :muro: :muro: :muro:

mas vamos lá.....coloquei no anexo para você ver melhor...

 

Eu to tentando fazer que o usuario da planilha só possa mexer nos botões das colunas A e C e sem poder realizar nenhuma alteração na B e na C

Macro da A "limpa" a B e C

Macro da C Procotolo da coluna B

Protocolo.rar

Link para o comentário
Compartilhar em outros sites

Calma @Roronoa Zero

 

Note que a Macro da Coluna A altera o conteúdo da coluna B, a qual nós selecionamos como 'bloqueada' em nossa macro principal, lembra-se?

 

Então para a Macro A funcionar na coluna B, ela também precisa ter a desproteção e proteção (ActiveSheet.Unprotect e ActiveSheet.Protect).

 

Toda macro que você fizer na planilha que for influenciar no conteúdo da coluna B e C deve ter essa abertura e fechamento de proteção. O erro está dando pois a coluna B está bloqueada e nem mesmo a macro da A consegue editá-la, o erro é algo como "Amigão, você bloqueou a coluna B e tá querendo limpar seu conteúdo, tá doidinho né?"  :D

 

Exatamente o mesmo conceito que disse acima aplica-se para a macro da coluna C.

 

Faça as alterações e teste ;)

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

@minoso ....

Tentei e deu erro....não sei se enfiei o codigo no lugar errado...(

Tenha paciencia comigo por favor porque não sei nadinha de VBA e Macro.... :santo:

Ele ta pedindo senha para ativar o macro...mas eu não quero que ele peça nada...só ative o macro e que só euzinho aqui possa realizar quaisquer alterações.... 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Roronoa

 

Experimente substituir o código que bloqueia e desbloqueia por este aqui:

 

Após o Dim:

ActiveSheet.Unprotect "TESTE"

Antes do End Sub:

ActiveSheet.Protect "TESTE"

Não ser esqueça de substituir a palavra TESTE pela senha da tua planilha.

 

Se a dica foi util, clique em Curtir.

 

[]s

Link para o comentário
Compartilhar em outros sites

@Roronoa Zero

 

Veja o anexo.

 

Algumas considerações

 

  • Desativei (apaguei  :P) a macro que rodava a cada alteração de célula. Substitui pela fórmula na coluna B, ok?
  • Alterei a macro Data01 Delete01 para que você tenha apenas uma macro de inserção e uma de exclusão para todos os botões
    • Uma observação para exclusão: é IMPRESCINDÍVEL que o usuário selecione a célula da coluna B que quer apagar antes de clicar no botão que aciona a macro Delete01. (para inserir não precisa selecionar nada, só apertar o botão)
      • Se não se atender para isso e clicar no botão de apagar, a macro apagará o conteúdo da célula que estiver selecionada no momento!
  • ​​Você precisa alterar o nome das macros que os demais botões estão 'chamando', todos os 'data' devem olhar para a macro Data01 e todos os 'x' devem olhar para a macro Delete01

Protocolo.zip

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

@minoso .... você é 10.... 

quero que me explique uma coisa....se tem como eu colocar somente um macro que seja "flexivel"?....pra deletar você disse é IMPRESCINDÍVEL que o usuário selecione a célula da coluna B que quer apagar antes de clicar no botão que aciona a macro Delete01.

Eu posso deixar somente um botão para data e um para delete? ai o usuario clica no campo e no lugar selecionado ele "aplica" o macro....AI caso tenha isto eu não preciso dessa infinidade de botões...fica 100% mais rápido e mais Clean....

vou te mandar  a planilha que estou editando...porque não faço ideia de como você travou as colunas B e C...ai não sei "copiar" isso para a minha... :hehehe:  :hehehe:  :hehehe:  :hehehe:  :hehehe:  :hehehe:  :hehehe:  :hehehe:  :hehehe:  :hehehe: 

ai queria travar as formulas tambem...se eu bloquear as colunas ele aceita ne?...

muito obrigado pela ajuda ate agora....

01 - DIRETORIA GERAL_Teste.rar

Link para o comentário
Compartilhar em outros sites

Que isso @Roronoa Zero , estamos aí pra se ajudar ;)

 

Sim, é possível ter um botão para cada ação sim. Pode apagar todos os outros :)

 

Eu não abri sua planilha, pois provavelmente ela deve estar uma versão anterior a da que eu lhe enviei (com macros corrigidas).

 

Você consegue copiar as macros da planilha que eu enviei para essa tua? Lembre-se que eu apaguei a sua macro do WorkSheet!

 

Depois que fize risso, anexe-a novamente e eu faço o bloqueio (com explicação).

 

Vamos nos falando! Bom final de semana.

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

Para bloquear, é o seguinte:

 

1. Clique no canto superior esquerdo da planilha para selecionar todas as células (linhas x colunas) conforme demonstrado na imagem abaixo:

 

670px-Unhide-Rows-in-Excel-Step-5Bullet1

 

2. Clique com o botão direito do mouse em qualquer célula e selecione a opção Formatar Células..., então selecione a aba Proteção e desmarque a opção Bloqueadas

 

3. Agora selecione apenas a coluna B e a coluna C, faça o mesmo procedimento do passo 2 e, no final, marque a opção Bloqueada.

 

Pronto! Feito isso, quando você proteger a planilha (via macro ou interface excel) apenas as colunas B e C estarão bloqueadas para alteração, exclusão ou inserção de valores ;)

 

Testa e veja se dá certo!

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

@minoso 

Deu certo...mas tenho um probleminha ainda....o botão de delete ainda me deixa apagar o protocolo...

tem como colocar uma caixa de aviso antes de apagar?

Tipo... O Cidadão...c ta apagando a linha X,,,,c tem certeza que quer fazer isso? 

queria até uma ajuda e uma opinião sua mesmo...

estou no dilema...se eu travar a coluna "B" para ser "indeletavel" corro o risco do cara clicar errado e eu ficar com um protocolo que não serve de nada....outrora...qualquer um pode vir apagar e  :priv:  com tudo que eu fiz e eu "perco" o numero...

o que eu poderia fazer?

È possivel restringir a celula para que só uma pessoa possa mexer? 

Tipo...eu posso fazer tudo mas para deletar só você que teria o "acesso".

Link para o comentário
Compartilhar em outros sites

Quantas dúvidas... :)

 

Antes, preciso que você responda a minha dúvida:

 

  1. Por quê alguém teria a opção/acesso de apagar protocolo se você ainda assim quer tornar a coluna B 'indeletável'? Não entendi esse ponto.

 

Sim, é possível solicitar confirmação antes de apagar e também é possível criar um macete para que o Excel entenda que para deletar você precisa de um 'perfil avançado' na planilha.

 

Eu também adaptei a planilha pra ela obrigar o usuário a selecionar uma célula da coluna C para o Delete_01( ) funcionar. Agora aquela minha recomendação de que era IMPRESCINDÍVEL que a célula C estivesse selecionada caiu por terra ;)

 

Para tanto, usei o código abaixo (o que já inclui se o modo administrador está ativado e se ele realmente quer excluir o sistema)

Sub Delete01()'' Delete01 Macro''    Dim resultado As VbMsgBoxResult        If Range("A1").Value = "" Then                'verificnado se a pessoa é o ADM para deletar        MsgBox "ACESSO NEGADO. Contate o administrador do sistema.", vbCritical            Else                    ' verificando se apenas a célula da coluna B está selecionada            If ActiveCell.Column <> 3 Then                                MsgBox "Você só pode apagar dados de DATA RECEBIMENTO [coluna C]"                                Else                                    'escolhendo se a exclusão do registro será realizada ou não com base no que o usuário clicar SIM/NÃO                            resultado = MsgBox("Você tem certeza que deseja excluir o registro?", vbYesNo, "Confirmação")                                        If resultado = vbYes Then                        MsgBox "Registro apagado com sucesso"                                            ActiveSheet.Unprotect                                            Selection.ClearContents                                            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True                        ActiveSheet.EnableSelection = xlNoRestrictions                                                Else                            MsgBox "Registro não excluído!"                                                End If                                End If    End IfEnd Sub

O modo administrador nada mais é do que uma macro simples que preenche a célula A1, se ela estiver preenchida, o modo está ativado, caso contrário não. Para alternar entre o modo (preencher e não preencher) você precisa adicionar uma terceira macro a planilha, esta:

Sub modo_adm()        ActiveSheet.Unprotect        If Range("A1").Value = "" Then        Range("A1").Value = 1        Else            Range("A1").Value = ""    End If        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True    ActiveSheet.EnableSelection = xlNoRestrictions    End Sub

Então você a configura para ser executada APENAS com teclas de atalho. No caso (planilha anexa) ela será ativada ao pressionar CTRL+q

 

Teste aí :)

Protocolo.zip

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

@minoso ....ficou perfeito Man....

tipo...fiquei meio assim quando pensei...como ele apaga "sem poder apagar"?

quanto ao Ctrl+Q...vou deixar isso de segredo pra mim kkkkk :P

Assim eu fico com a "demanda" de deletar caso eles façam caquinha...é melhor um trabalho maior do que um retrabalho e a dor de cabeça de perder um código...

Uma ultima duvida para fechar essa "novelinha mexicana"  :jump:  :jump:  :jump:

quero colocar uma planilha que copie um codigo...(uma sequencia numerica) é possivel criar um botão com um "Se"?

tipo...botão na planilha 2,,,,,=se tiver vazia a celula a1 da planilha 1  você não faz nada, se tiver você copia e cola como valor pra não sumir mais

tipo aquilo que você fez com a data...para sair clicando em varios e sai colocando conforme a celula selecionada...

Obrigado mesmo...to aprendendo muito....vou fazer um curso de VBA porque to muito interessado nisto  :aplausos:

Link para o comentário
Compartilhar em outros sites

@Roronoa Zero

 

Não entendi bem a demanda.

 

Você quer que a planilha 2 seja um espelho da planilha 1 sem referência de fórmula? Ou seja, se o caboclo apagar 10 dos 100 registros da planilha 1, a planilha 2 ainda ficará com os 100 registros originais, é isso ?

 

Não precisa de curso VBA cara, o que eu sei (que não são nem 10% de todo o potencial), aprendi caçando em fóruns, google e vivenciando no dia a dia conforme as necessidades.

 

Explica melhor a demanda aí que te ajudo ;)

 

Essa novela mexicana está quase tão boa quanto A Usurpadora  :D

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

@minoso .....kkkkkkkkkkkk

Então vamos a mais um capitulo da novela....

Eu usei a formula e apliquei em um macro

Sub Copy1()
'
' Copy1 Macro
'
 
'
    Range("B3").Select
    ActiveCell.FormulaR1C1 = _
        "=IF('DADOS INICIAIS DA SOLICITAÇÃO'!RC="""","""",'DADOS INICIAIS DA SOLICITAÇÃO'!RC)"
    Range("B3").Select
    Selection.Copy
    Range("B3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("B3").Select
    Application.CutCopyMode = False
End Sub
 
mas eu queria fazer igual a você....  :cry:
queria q toda vez que eu clicasse...ele preenchesse...igual você fez com a data...se eu clicar na data...ela sai preenchendo todos os campos vazios...não sei como fazer esse "continue"....  :(-*:
Obrigado...
Link para o comentário
Compartilhar em outros sites

@minoso ....

Desculpe...não me expressei direito

Anexei em 2 formatos...caso não consiga abrir....

olha...não sei se fiz algo errado,,,mas quando copiei e colei o seu macro na minha planilha ela continua bloqueando...mas o Ctrl + q, não quer mais "funcionar"...queria que me explicasse o que eu fiz d errado...ai eu aprendo de vez...

e é  o que você disse mesmo...

È uma Cópia da outra....no campo justificativa tem o numero da solicitação...eu queria saber se tem como colocar o SE...tipo...Se na planilha 1 tiver vazia você preenche com o que tem la ( ou seja...vazio)...se erro na você copia e cola com valor para ficar fixo e não apagar mais...assim tenho um protocolo e um "Backup"

Obrigado e desculpe o mal entendido  :lol:

Protocolo1.1.rar

Link para o comentário
Compartilhar em outros sites

@Roronoa Zero , estou vendo aqui em partes (e no meio da correria do trabalho)  :D

 

O erro na macro de administrador é que faltou apenas você configurar a macro para ser acessada como tecla de atalho. (erro meu, esqueci de te avisar!)

  1. Depois de inserir a macro modo_adm no Excel
  2. Clique na guia Desenvolvedor, ao lado da guia Exibição
  3. Clique no segundo botão da esquerda para direita chamado Macros
  4. Na janela que abrir, com a lista de todas suas macros, apenas seleciona a macro com o nome modo_adm
  5. Então clique no botão Opções
  6. Em teclas de atalho, o Ctrl já está pré-definido, então basta inserir a letra que quiser, no nosso exemplo, a letra q (em minúsculo)

Assim que terminar tudo o que tem pra fazer, eu anexo o arquivo novamente. Esse botão copy não é tão simples  :lol:  Vai precisar duma macro gordinha. (se não der pra postar hoje, amanhã sem falta  ;) )

 

Me divirto com sua planilha  :P


EDITADO em 22/12/2014 as 17h45: Um detalhe que notei que está errado no seu arquivo, você está inserindo macros tanto no item MÓDULO quanto na própria pasta de trabalho. Insira macro apenas no item MÓDULO. (no arquivo que estou fazendo, já apaguei. Certifique-se de que o que você está trabalhando também não tenha nada)  :rolleyes: 

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

  1. No módulo a macro aguarda ser acionada por um botão ou tecla de atalho. Ela fica offline e só é executada por interação do usuário
  2. Na Pasta a macro fica "viva" e sendo executada a todo momento. Sempre que o usuário realiza uma atividade no excel de inserção, exclusão ou alteração de célula dentro da pasta onde a macro foi inserida, ela então é executada.

Amanhã anexo o arquivo com o botão de Backup e o respectivo código VBA para leitura e explicação ;)

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

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...