Notifications
Clear all

Deletar Linha conforme condição

4 Posts
2 Usuários
0 Reactions
1,993 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite Senhores !

Será que alguém poderia me ajudar a encontrar onde esta a falha na rotina abaixo ?

Estou tentando EXCLUIR uma linha caso encontre o valor na coluna H, pra mim estaria tudo certo, mas tá ocorrendo erro em tempo de execução 91. " "A variável do objeto ou a variável do bloco 'with' não foi definida!"
O que estou fazendo de errado ?

Sub EXCLUI()
Dim exemplo As String
    exemplo = MES.TEXT

Dim XX As Range, iI As Integer
Dim rgOrigemS As Range


Set XX = Worksheets(exemplo).Range("H:H").Find(What:=controle.TEXT, After:=Worksheets(exemplo).Range("H2"), LookIn:=xlValues, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)

'Do While Not x Is Nothing
iI = XX.ROW

If Not XX Is Nothing Then
Sheets(exemplo).Activate
Set rgOrigemS = Sheets(exemplo).Range("H" & iI)

rgOrigemS.EntireRow.Delete
 
Postado : 05/07/2012 8:09 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Guima o trecho de codigo está incompleto, bem como se referencia a controles que podem ser de um form ou mesmo na planilha (mes.text , controle.text), então fica dificil tentar adivinhar o que ocorre; qual a versão de seu excel,
Se puder disponibilize um exemplo de sua planilha

 
Postado : 06/07/2012 1:28 pm
(@benzadeus)
Posts: 78
Trusted Member
 

Tenho alguns comentários sobre seu código:
-Declare as variáveis que utilizar. Variáveis sem declaração é o primeiro passo para um código falhar: http://ambienteoffice.com.br/officevba/ ... _variavel/
-Dê nomes que façam sentido às suas variáveis. Estou supondo que 'controle' seja uma Caixa de Texto (TextBox), mas não tenho certeza. Por que não nomeá-la como txtControle? O mesmo vale para a variável 'exemplo'. Por que não identificá-la como sExemplo, sendo o prefixo 's' uma dica de que se trata de uma String? http://ambienteoffice.com.br/officevba/ ... or_sufixos
-Você não postou o código pela metade.Não sei o que há depois da última linha, há o término de um laço?
-O trecho:

    iI = XX.Row
    
    If Not XX Is Nothing Then

Gera muitas dúvidas. Você não declarou a variável iI, que deveria ser um Long (ou Integer). Depois, você utiliza o comparador Nothing para testar o valor? Você só pode testar variáveis com Nothing quando a mesma é um objeto, como por exemplo os objetos Range e Worksheet.

O código abaixo apaga todas as linhas da coluna H da Planilha de nome sPlanilha cujo valor seja igual ao texto da Caixa de Texto frmControle:

Sub Exemplo()
    Dim lRow As Long
    Dim lLast As Long
    Dim sPlanilha As String
    Dim sColBusca As String
    
    Application.ScreenUpdating = False
    
    'Altere os valores abaixo, se necessário:
    sPlanilha = "Exemplo"
    sColBusca = "H"
    
    With Worksheets(sPlanilha)
        'Obtém a última linha da coluna de busca:
        lLast = .Cells(.Rows.Count, sColBusca).End(xlUp).Row
        
        'Considerando que a primeira linha é o cabeçalho:
        For lRow = lLast To 2 Step -1
            If .Cells(lRow, sColBusca) = txtControle.Text Then
                .Rows(lRow).Delete
            End If
        Next lRow
    End With

    Application.ScreenUpdating = True
End Sub

Observe que o laço que percorre os valores da coluna e exclui linhas deve ser feito da última linha até a primeira. Isso acontece porque se fosse feito do primeiro ao último, ao excluir uma linha, a instrução Next pularia para uma superior à que foi apagada, mas como no ato de exclusão de linha as que estão abaixo sobem, o efeito real seria de pular duas linhas e então a linha imediatamente após a excluída não é verificada.

 
Postado : 06/07/2012 1:30 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ola Senhores.

Obrigado pelos esclarecimentos. O código esta completo, so faltou colocar o END IF para finalizar.

As informações do site do Benzadeus, bem como o exemplo foram de grande valia. Reinaldo, agradeço-lhe também a atenção dispensada.

Abraço e obrigado mais uma vez

 
Postado : 08/07/2012 3:28 pm