Ir para conteúdo
Fórum Script Brasil
  • 0

UserForm por exclusão


Eduardonada

Pergunta

Oie! Preciso de uma ajuda em relação a meu código em VBA.

Possuo uma planilha em que preciso limitar as pessoas que excluem os itens de um índice, pensei em um UserForm com caixa de texto pedindo uma senha, para deixar registrado quem esta permitindo exclusões, no entanto, não consigo achar uma forma do código entender que o valor texto de uma célula foi excluído (para funcionar como um gatilho do Userform)

Atualmente tentei por sinal Key, como sinal do teclado, mas mesmo assim o código não executa a macro como esperado.

Código da Planilha Indice:

Private Sub Worksheet_Change(ByVal Target As Range)

         Dim KeyCells As Range

         Set KeyCells = Me.Range("B5:B" & Me.Cells(Me.Rows.Count, "B").End(xlUp).Row)

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

      If Target.Value = "" And Not Intersect(Target, Me.Range("B:B")) Is Nothing Then

                 senha.Show 

                 Application.EnableEvents = False 

                 Target.Value = "" 

                 Application.EnableEvents = True 

        End If

    End If

End Sub

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 1

@Eduardonada Bom dia.

Seu problema realmente precisou de uma lógica e pode ser que já até tenha resolvido ai kkkk

Vamos lá:

Na planilha1 do meu teste eu coloquei um variável para contar a quantidade de linhas existentes, também coloquei uma variável pare saber se está sendo autorizada a exclusão de linhas atuais (ou diminuição do total de linhas).
 

Option Explicit                     'Obrigado declarar o tipo de cada variável

Public amountLines As Integer       'Linhas atuais na planilha
Public isConfirmExclude As Boolean  'Variavel para confirmar se pode excluir a linhas

Depois coloquei o evento a cada alteração acontecer na planilha ele chamar um formulário para saber se pode excluir ou não:
 

Private Sub Worksheet_Change(ByVal Target As Range)
  'A cada alteração na planilha é verificado se a quantidade de linha aumentou ou diminuiu
  
  Dim currentLines As Integer       'Declarado as linhas atuais
  Const COLUMN_BASE As String = "A" 'Coluna base para contar as linhas
  
  'Pega o numero da ultima linha com base na na Coluna
  currentLines = ActiveSheet.Cells(Rows.Count, COLUMN_BASE).End(xlUp).Row
  
  If currentLines < amountLines Then
    'Caso tenha diminuido a quantidade de linhas

    isConfirmExclude = False
    frmConfirmExclude.Show
    
    'Caso não tenha sido autorizado e vai desfazer a alteração
    If Not isConfirmExclude Then
        Application.Undo
    End If
  End If
  amountLines = currentLines
End Sub

Agora chegou a parte do formulário. Foi criado um formulário passando apenas uma senha 123 para casa realmente a alteração esteja confirmada.
image.png.7a550f71b5db0ee72a8990109da07c52.png

 

Foi construído um código que vai alterar a variável isConfirmExclude caso o código pode ser excluído (lá da planilha1). Apenas quando a senha for digitada certa.

 

Private Const PASSWORD As String = "123"  'Senha padrão para validação

Private Sub btnConfirmar_Click()
If txtPass.Value = PASSWORD Then
  Planilha1.isConfirmExclude = True       'Libera a alteração
  Unload frmConfirmExclude                'Fecha o formulário
Else
  Planilha1.isConfirmExclude = False      'Priobindo a alteração
End If

End Sub

Private Sub UserForm_Activate()
  Planilha1.isConfirmExclude = False      'Só por garantia que o valor vai ser falso quando abrir
End Sub

 

Claro que pode ficado difícil de imagina então estou colocando o código abaixo:
Link(planilha onedrive): Eduardonada - UserForm por exclusão.xlsm

Link para o comentário
Compartilhar em outros sites

  • 0
3 horas atrás, Alyson Ronnan Martins disse:

Bom dia @Eduardonada

O que esta pensando em "encontrar" é o índice para ser excluído ou a senha, ficou meio confuso seu texto.

    Opa! Na verdade eu preciso que o meu código identifique o ato de excluir como um gatilho para o Userform, que questiona a exclusão solicitando uma senha para continuar.
    No entanto, o código não funciona como esperado, por exemplo:
Insiro a senha correta e clico em "Excluir" o mesmo funciona porém entra em um loop;
Insiro a senha incorreta e clico em "Excluir" o mesmo acusa senha incorreta e apaga a célula (Algo que não deveria);
Ao clicar em "Fechar" o mesmo permite a exclusão da célula (Algo que não deveria);

Sendo assim de qualquer maneira permitindo a exclusão, precisaria q isso não ocorresse.
 

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde! kkkk Muito obrigado mesmo. Eu realmente não considerei muitas partes do seu código acima, mas me perdi um pouco onde usar cada uma delas, conseguiria só me esclarecer um pouco melhor?

OBS: Não estou conseguindo acessar o link pelo one drive hehe
 

Link para o comentário
Compartilhar em outros sites

  • 0

Quando você abre o link não aparece esse botão?
image.thumb.png.e387939cc14365bad0316c5cc7b7a719.png

Só "logar" sua conta da microsoft

image.png.28b07b044083862c3253607886231f55.png

Uma melhoria no código da alteração da planilha:
 

Option Explicit                     'Obrigado declarar o tipo de cada variável

Public amountLines As Integer       'Linhas atuais na planilha
Public isConfirmExclude As Boolean  'Variavel para confirmar se pode excluir a linhas

Private Sub Worksheet_Change(ByVal Target As Range)
  'A cada alteração na planilha é verificado se a quantidade de linha aumentou ou diminuiu
  
  Dim currentLines As Integer       'Declarado as linhas atuais
  Const COLUMN_BASE As String = "A" 'Coluna base para contar as linhas
  
  'Pega o numero da ultima linha com base na na Coluna
  currentLines = ActiveSheet.Cells(Rows.Count, COLUMN_BASE).End(xlUp).Row
  
  If currentLines < amountLines Then
    'Caso tenha diminuido a quantidade de linhas

    isConfirmExclude = False
    frmConfirmExclude.Show
    
    'Caso não tenha sido autorizado e vai desfazer a alteração
    If Not isConfirmExclude Then
        Application.Undo
        currentLines = currentLines + 1
    Else
      currentLines = currentLines + 1
    End If
    
    
  End If
  amountLines = currentLines
End Sub

 

@Eduardonada

Link para o comentário
Compartilhar em outros sites

  • 0

Muito obrigado amigo, @Alyson Ronnan Martins 

Fico grato de estar me auxiliando neste processo de aprendizagem! Possuo outras ideias e caso não se sinta incomodado de me auxiliar, ficaria encantado com tamanha compreensão.

Acessei a Plan e realizando alguns testes, após cancelar o userform e tentar excluir novamente, o código permite a exclusão do conteúdo da célula, está ação também deveria abrir o userform, não?


Trarei outras dúvidas, pode ter certeza! kkkkk

Forte abraço...

Editado por Eduardonada
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...