Ir ao conteúdo

Bloquear Célula sem travar Macro


Roronoa Zero

Posts recomendados

Postado

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?

 

Postado

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!
Postado
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
Postado

@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 ;)

Postado

@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
Postado

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.

Postado

@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

Postado

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 ;)

Postado

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

  • Membro VIP
Postado

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

Postado

@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

Postado

@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

Postado

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.

Postado

Bom Dia @minoso

...to 100 PC em ksa...por isto não respondi fim d semana  :unsure:

Quanto a planilha...eu não copiei o  seu...mas usei o seu de base e transferi os dados para lá....ta ficando massa....

se puder me explicar como bloqueia depois....

obrigado novamente

Postado

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!

Postado

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

Postado

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

Postado

@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:

Postado

@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

Postado

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

@Roronoa Zero você pode anexar essa planilha que está utilizando?

 

Esse botão serial algo como fazer um back up da Planilha 1 para a Planilha 2?

 

Desculpa, mas ainda não entendi mesmo... Por isso não consigo opinar no código que você enviou.

Postado

@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

Postado

@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: 

Postado

@minoso ,,, deu certo a parte do Ctrl Q... Obrigado...

desculpe atrapahar você no seu trabalho...

Poderia me explicar a diferença do Módulo e na Pasta...porque eu "nem sei " o que to fazendo...  :santo:

Então nem sei onde q to colocando.... :crazy:  

Postado
  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 ;)

Arquivado

Este tópico foi arquivado e está fechado para 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...