Notifications
Clear all

Como substituir MSGBOX por m FORM

13 Posts
3 Usuários
0 Reactions
2,126 Visualizações
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Olá,

Boa noite.

Um colega aqui do fórum me auxiliou na criação de um método de proteção e desbloqueio de células. Ocorre que algum tempo depois eu percebi que existe um "bug" no código. Como já havia encerrado o código e sem querer abusar, considerei postar como uma dúvida.

O código exibe um uma senha e se a mesma for correta a célula é desprotegida. Ocorre que a senha e revelada. Busquei uma forma de exibir os asteriscos, mas os que encontrei são extensos e não conseguiria fazer as adaptações.

Lembrei ainda que em um FORM, existe uma propriedade do TEXTBOX chamada PasswordChar, onde é possível ocultar a digitação.

Minha dúvida é como adaptar o código de modo a receber a senha através de um form.

Obrigado !

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim strS As String
  Cancel = True
  strS = InputBox("digite a senha"),
   If strS = "" Or strS <> "senha" Then Exit Sub
    ActiveSheet.Protect "senha", UserInterfaceOnly:=True
    Target.Locked = False
End Sub
 
Postado : 28/05/2016 5:10 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Nao testei seu codigo apenas inseri o codigo no formulario como vc pediu

Ve se é assim

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 28/05/2016 5:52 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Olá MPrudencio,

É isso sim, só estou imaginando como unir o código que postei com a funcionalidade da sua solução.

 
Postado : 28/05/2016 7:09 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Se seu modelo não tiver nenhum Módulo, Insira um e cole a linha abaixo nele :
Public sTarget As String

Depois na rotina do formulário altere a linha:
'Target.Locked = False
Por esta :
Range(sTarget).Locked = False

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 28/05/2016 8:51 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Mauro,

Segui suas orientações, mas não deu certo. Sei que devo arrastar o FORM do arquivo do MPrudencio para meu arquivo. Então terei meu código original e o código dele.
O código dele está associado a um botão. O meu está fora, pois exibia apenas uma caixa de texto. Inseri um módulo e a linha que enviou. Quando clico com o botão direito aparece a rotina original e não o formulário. O que fiz de errado? Onde e como será chamado o Form ?. Preciso excluir algo ? Também alterei a linha que sugeriu.

É ISSO.

 
Postado : 29/05/2016 6:37 am
(@mprudencio)
Posts: 2749
Famed Member
 

O seu codigo era disparado com o botao direito do mouse BeforeRightClick

Entao dentro do evento BeforeRightClick coloquei o codigo que chama o formulario, conforme codigo abaixo que deve substituir o seu codigo.


Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
FrmSenha.Show
End Sub

O restante é so importar o formulario para sua planilha, como eu disse nao testei so troquei a inputbox pela textbox do formulario

Se nao quiser o botao proteger basta trocar o digo do botao para o evento exit da textbox

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 29/05/2016 7:10 am
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Ok Mprudencio,

Já consigo clicar e abrir o form. Mas acontece um erro de execução, código 424, o objeto é obrigatóio. Alinha destacada é a que o Mauro mandou alterar. Alterando ou nao, ocorre o mesmo erro.

Range(sTarget).Locked = False
 
Postado : 29/05/2016 7:45 am
(@mprudencio)
Posts: 2749
Famed Member
 

Neste caso nao sei pq eu nem testei seu codigo original.

Apenas ajustei como disse na postagem anterior.

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 29/05/2016 8:04 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

luiz, cometi um equivoco, esqueci de informar uma outra alteração.

Siga a lógica :
Criamos um Módulo e Declaramos uma Variável como "GLOBAL - PUBLICA" - ou seja, esta armazena um valor que poderá ser utilizada em qualquer operação e permanecerá na memória até que a limpemos:
Módulo qualquer declaramos ;
Public sTarget As String

Na rotina original, a mesma foi feita para se utilizar no Evento da aba o qual capturamos "TARGET" que se refere ao endereço da celula Selecionada.
E como foi adaptada para ser utilizada fora do Evento da aba, devemos levar o valor de "TARGET" até o formulário, e isto fazemos criando uma Variável Global, neste caso, criei "sTarget"

Resumindo, no Evento da aba, devemos adicionar a Variável, ficando assim:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

    sTarget = Target.Address(0, 0)
    FrmSenha.Show

End Sub

Agora não terá mais o erro referente a Variável "sTarget"

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 29/05/2016 12:00 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Boa noite Mauro,

Não desisto facilmente, e espero que você também não.

Refiz todos os passos. O erro com o anterior sumiu, mas....o código do form não executa nada. É exibido, recebe a senha, mostra os asteriscos e não responde, ou seja, não desbloqueia o intervalo. Ao fechar o form é exebido ´menu de contexto normal.

Desfiz sua sugestão da linha ..."Range(sTarget).Locked = False..." e nada.

Tem um i sem pingo no meio desse código.

Obrigado pela força.

 
Postado : 29/05/2016 4:35 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Luiz, com certeza o código do form está sendo executado, este código você mesmo que indicou, se funciona no evento da aba, tem de funcionar no ajuste para o form conforme eu indiquei.
Provavelmente o "pingo" deve estar em alguma linha ou configuração que está fazendo, lembre-se que estas instruções estão sendo testada em um modelo limpo, sem nenhuma outra macro, se estiver adaptando a um modelo que tem outras rotinas executando no evento, precisa ser revista.

Segue o modelo, veja que as celulas inciais estão bloqueadas e a aba protegida, aproveitei e coloquei uma instrução para desabilitar o menu do botão direito do mouse, se for utilizar o menu em outra aba tem de habilita-lo novamente.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 29/05/2016 5:48 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Boa noite Mauro,

Seu arquivo funciona perfeitamente. Fiz as adaptações. O erro mudou. Segue o meu arquivo com as adaptações com o seu código.

Mais um detalhe. Sim, existe outro código que é o do bloqueio, que é o principal. Esse do form é acessório. Sempre imaginei que não tinha nada a ver com os problemas do form.

 
Postado : 29/05/2016 8:22 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

luiz, não tenho como baixar seu arquivo no momento, mas com certeza se tem algum outro evento na aba, dependendo das instruções irá afetar.
Lembro que seu outro post você usava o Evento_Change para bloquear a celula, e no modelo que enviei, está utilizando o Evento BeforeRightClick que chama o formulário e depois de confirmado estava inserindo "Desbloqueado" na celula, então esta ação de inserir o texto irá chamar as instruções que estão no evento Change, e como eu disse, se um desbloqueia e o outro bloqueia, irá estar bloqueada.
E como só disse que "o erro mudou" e não disse qual fica, fica dificil.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 30/05/2016 9:03 am