Notifications
Clear all

Impedir linhas vazias

7 Posts
2 Usuários
0 Reactions
1,807 Visualizações
(@carloshvb)
Posts: 99
Trusted Member
Topic starter
 

Boa tarde Pessoal,

Estou com um problema na rotina que criei e meio que impaquei na solução.

Eu tenho uma planilha onde os dados da coluna A devem ser inseridos sem pular linha, então para impedir que o usuário tente pular uma linha e digitar o dado abaixo, eu criei a torina abaixo:

Public Oldcell As Range

Private Sub worksheet_change(ByVal Target As Range)

    If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub

            Set Oldcell = Target
            linha = Oldcell.Row
            linha2 = Oldcell.Row - 1
                 Do While Range("A" & linha2) = ""
                    Range("A" & linha2, "A" & linha).Clear
                    Range("A" & linha2).Select
                    linha2 = linha2 - 1
                  Loop
             MsgBox ("Favor não deixar campos vazios na coluna de Datas")

End Sub

O código funciona bem se o usuário pular apenas uma linha, o problema é quando ele pula varias linhas, nete caso, inicia-se um looping quase infinito.

Por isso estou recorrendo ao auxílio de vocês, tem como melhorar este código para que exiba a mensagem uma única vez, limpe o valor digitado e selecione a primeira célula vazia abaixo dos dados da coluna.

Desde já, obrigado pela ajuda.

Att, Carlos

 
Postado : 01/02/2018 12:37 pm
(@osvaldomp)
Posts: 857
Prominent Member
 

Experimente:

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Count > 1 Then Exit Sub
 If Target.Column <> 1 Or Target.Row = 1 Or Target.Value = "" Then Exit Sub
 If Target.Offset(-1).Value = "" Then
  Target.Value = ""
  Cells(Rows.Count, 1).End(3)(2).Activate
  MsgBox "Favor não deixar campos vazios na coluna de Datas"
 End If
End Sub

Osvaldo

 
Postado : 01/02/2018 1:03 pm
(@carloshvb)
Posts: 99
Trusted Member
Topic starter
 

Osvaldo,

Muito obrigado, funcionou 99%, o problema agora é que minha planilha está formatada como tabela (listobject) então ao invés do código

Cells(Rows.Count, 1).End(3)(2).Activate

selecionar a última linha vazia da tabela, ele seleciona a última linha vazia após a linha de TOTAIS da tabela.

Tem como ajustar isso, já mata outra dúvida minha que é justamente selecionar a última linha de uma tabela.

Obrigado

Att, Carlos

 
Postado : 01/02/2018 1:52 pm
(@osvaldomp)
Posts: 857
Prominent Member
 

Disponibilize uma amostra do seu arquivo Excel.
Veja as regras do fórum sobre anexar arquivos.

Osvaldo

 
Postado : 01/02/2018 2:29 pm
(@carloshvb)
Posts: 99
Trusted Member
Topic starter
 

Disponibilize uma amostra do seu arquivo Excel.
Veja as regras do fórum sobre anexar arquivos.

Bom dia Osvaldo,

Segue o modelo simplificado, deixei apenas o campo "DATA" preenchido pois é o campo que interessa no momento.

Obrigado pela ajuda.

 
Postado : 02/02/2018 8:15 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Olá, Carlos.
Experimente o código abaixo no lugar do anterior.
Acrescentei também um comando para permitir inserção de fórmulas na última linha da Tabela, coluna A, se a penúltima estiver vazia.

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Count > 1 Then Exit Sub
 If Target.Column > 1 Or Target.Row < 7 Or Target.Value = "" Then Exit Sub
 If Target.Row = ListObjects("Tabela2").TotalsRowRange.Row Then Exit Sub
 If Target.Offset(-1).Value = "" Then
  Target.Value = ""
  [A6].End(4)(2).Activate
  MsgBox "Favor não deixar campos vazios na coluna de Datas"
 End If
End Sub

Osvaldo

 
Postado : 02/02/2018 10:24 am
(@carloshvb)
Posts: 99
Trusted Member
Topic starter
 

Ficou perfeito, muito obrigado Osvaldo

 
Postado : 02/02/2018 12:50 pm