Tag Archives: macro

VBA – Excluindo linhas em branco no Excel

De vez em quando a Microsoft é mãe. Além de fornecer a ferramenta (guardadas as devidas proporçõe$), fornece vários exemplos de como resolver os problemas com elas. Seria esse o valor agregado?

Enfim, mas uma dúvida frequente em emails de fóruns é pelo VBA conseguir excluir as linhas que estão em branco ou vazias em uma planilhas. Outros códigos já disponibilizados aqui no fórum já promovem a façanha com um pequeno ajuste. Mas, para quem quer um código mais focado, a própria Microsoft disponibiliza a seguinte Macro:

' The following code deletes blank rows from the active worksheet.
 
Dim Counter
Dim i As Integer
 
Sub DelRow()
 
' Input box to determine the total number of rows in the worksheet.
    Counter = InputBox("Enter the total number of rows to process")
    ActiveCell.Select
    ' Loops through the desired number of rows.
    For i = 1 To Counter
        ' Checks to see if the active cell is blank.
        If ActiveCell = "" Then
            Selection.EntireRow.Delete
 
            ' Decrements count each time a row is deleted. This ensures
            ' that the macro will not run past the last row.
            Counter = Counter - 1
        Else
            ' Selects the next cell.
            ActiveCell.Offset(1, 0).Select
        End If
 
    Next i
 
End Sub

A parte bacana é que o código, ao ser executado, ele mostra um InputBox solicitando a quantidade de linhas que serão processadas, ou avaliadas. É uma boa, pois você pode não querer varrer todas as linhas de uma planilha certo?

O link original é:

http://support.microsoft.com/kb/110759/pt-br

Bom proveito!

VBA – Localizar dados em várias planilhas no Excel

busca-blog[1]

O recurso Localizar do Excel (mais conhecido com Ctrl+L entre os veteranos da versão PT-BR) é um dos itens desse poderoso canivete suíço que é a ferramenta.

O inconveniente é que não temos tão facilmente o recurso funcionando da mesma forma pelo VBA. Mesmo que gravemos uma macro utilizando o recurso Localizar, caso a executemos sem que haja um resultado válido para a busca, ele retorna em erro. O motivo é que, no final da macro gravada termina com um .Select, pois a célula com o resultado da busca é ativada quando esta se encerra. Portanto, sem resultado, o erro persiste.

A macro abaixo faz o mesmo papel do busca, porém, prevendo o mau comportamento da macro gravada. Além disso, caso encontre um resultado, ela oferece a continuidade da busca:

Sub Procura()
    'Declara uma strign que vai receber o valor a ser procurado na planilha
    Dim procurado As String
    'Declara uma variável para receber o resultado de um MsgBox
    Dim result As VbMsgBoxResult
    'Declara duas variáveis do tipo inteiro
    'i -> Para controlar o laço de repetição
    'QuantPlanilhas -> para armazenar a quantidade de planilhas da pasta de trabalho atual
    Dim i, QuantPlanilhas As Integer
    'Atribui a quantidade de planilhas da pasta atual à variável QuantPlanilhas
    'O método ThisWorkbook.Worksheets.Count retorna esse parâmetro
    QuantPlanilhas = ThisWorkbook.Worksheets.Count
    'Mostra um InputBox para que seja inserido o dado que será procurado em todas a
    'Pasta de trabalho e atribui seu valor à variávle procurado
    procurado = InputBox("Digite o valor a ser procurado", "Valor procurado", "Exemplo, 2, 3, uma data qualquer")
    'Inicia o laço de repetição que varre todas as planilhas da pasta de trabalho atual
    For i = 1 To QuantPlanilhas Step 1
        'Seleciona toda a área da planilha
        With Worksheets(i).Range("A:IV")
            'Efetua o método de busca, que retorna o valor se for encontrado ou
            'Nothing caso não encontre nada
            Set c = .Find(procurado, LookIn:=xlValues)
            'Caso tenha achado algo, ativa a célula onde está o valor procurado
            'e oferece para o usuário se quer ou não continuar a busca
            If Not c Is Nothing Then
                Worksheets(i).Select
                Range(c.Address).Select
                result = MsgBox("Deseja continuar a busca?", vbYesNo, "Continuar?")
                'Caso queira, continua a busca, caso contrário, sai do laço
                If result = vbNo Then
                    Exit Sub
                End If
            End If
        End With
    Next
End Sub

Basta executar para observar o resultado.
Bom proveito!