Continuando o assunto, eu cheguei a realizar as adaptações recomendadas, e enviei ao Alex com uma obs conforme abaixo, então segue minha resposta e a rotina readaptadada:
ALeXceL,
Mais uma vez agradeço pela aula, apesar de estar lidando com VBA a um bom tempo, e como tudo que sei, foi atraves dos Foruns e colegas como você que sempre tiveram disposição de ajudar e ensinar, eu realmente não sabia desta variação de definíção de forma implícita ou explicita, sabia que toda Variavel não definida, o VBA assume como Variant, mas, sempre é tempo de aprender.
Baixei as apostilas, vou imprimi-las e ler com atenção, o site que indicou tambem é ótimo, o meu ingles não é aquelas coisas, mas na medida do possivel vou ver se consigo dar minha contribuição.
Voltando a rotina, pode parecer engraçado, mas quando fiz as adaptações, eu tinha declarado lngLinha e UltimaLinha "Explicitamente", ou seja separadas como Long, fiz os testes antes e correu tudo Ok, mas na hora de postar, resolvi limpar o código e na limpesa deixei-as "implicitas", se eu soubesse disto antes, não teria feito, mas o lado bom, é que aprendi mais uma, agradeço mais uma vez.
De fato, eu limitei o intervalo pela Coluna "A", não havia penssado na possibilidade que citou.
Quanto a Opção de Continuar "Sim", a intenção foi justamente a de alertar que se apagara uma linha vazia que está fora do contexto das linhas preenchidas, e com a sua sugestão, se continuarmos, será apagada a última linha definida na contagem, o que talvez não seja a linha desejada, então, junto com sua sugestão eu alteraria tamebm a mensagem avisando o usuário desta ocorrência.
Sendo assim, segue novamente a rotina com as alterações, e por favor, se tiver mais algum erro, avise-me.
Sub fnDeletaLinha3()
Dim lngLinha As Long
Dim UltimaLinha As Long
UltimaLinha = ActiveSheet.UsedRange.Rows.Count
On Error Resume Next
lngLinha = InputBox("Número da linha que será apagada: ", "Apagar uma linha", ActiveCell.Row)
On Error GoTo 0
If Val(lngLinha) <> 0 Then
If lngLinha <= ActiveSheet.Rows.Count Then
If lngLinha > UltimaLinha Then
If MsgBox("Foi definido uma linha fora do contexto" & Chr(13) & _
"se continuar, será apagada a linha :- " & UltimaLinha & Chr(13) & _
" que é a última Linha Preenchida :- " & Chr(13) & _
"Deseja Continuar ? ", vbQuestion + vbYesNo, "Continuar...") = vbNo Then
Exit Sub
Else
lngLinha = UltimaLinha
GoTo slDeleta
End If
Else
slDeleta:
ActiveSheet.Cells(lngLinha, 1).EntireRow.Delete xlShiftUp
End If
Else
MsgBox "Esta planilha possui apenas " & ActiveSheet.Rows.Count & " linhas!"
End If
Else
'Nada feito...
End If
End Sub
Desde já agradeço a compreensão dos colegas.
[]s
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 08/09/2011 9:44 pm