Estou tentando criar uma macro que automatize um relatório. O problema é que os dados de origem trazem dados que não precisamos, e o próprio relatório faz muitos cálculos com base na tabela como um todo. Há centenas de cálculos sendo feitos com base na tabela, portanto, adicionar um parâmetro de inclusão a cada fórmula do relatório levará um tempo proibitivo.
Isso é facilmente contornado ao atualizar o relatório manualmente, usando o filtro, filtrando os dados e excluindo os dados relevantes. No entanto, estou tentando automatizar o arquivo, para que possamos apenas clicar em um botão e atualizá-lo sem precisar gastar 20 a 30 minutos fazendo isso.
O que eu quero fazer, mas não consegui resolver até agora, é fazer com que o VBA exclua todas as linhas onde uma coluna contém uma determinada string.
Isso faz parte de uma macro maior, que atualiza dados, corrige uma coluna de datas usando Texto para Colunas, exclui uma seção de dados, calcula as fórmulas na planilha de KPI e salva-a como a data desta semana.
Posso automatizar todas as outras etapas ok, pois já criei várias macros para atualizar outros relatórios, mas isso me deixou perplexo! Meu Google-Fu também falhou comigo.
Responder1
Este sub exclui a(s) linha(s) inteira(s) de uma planilha quando um valor definido pela variávela cordaestá na coluna definida pela variávela coluna
Sub deleterows()
Dim a As Application
Dim wkb As Workbook
Dim wks As Worksheet
Dim DataRange As Range
Set a = Application
Set wkb = ThisWorkbook
Set wks = wkb.ActiveSheet
wks.Application.ScreenUpdating = False
thecolumn = 2 'this have to be changed to the desired column
thestring = "some text" ' this have to be changed too
reviewing = True
visitrow = 1
While reviewing = True
visitrow = visitrow + 1
If wks.Cells(visitrow, 1) = "" Then
reviewing = False
End If
celldata = wks.Cells(visitrow, thecolumn)
If IsNumeric(celldata) = True Then
celldata = Trim(Str(celldata))
End If
If celldata = thestring Then
wks.Rows(visitrow).Delete
visitrow = visitrow - 1
End If
Wend
wks.Application.ScreenUpdating = True
Message = MsgBox("Finished!", vbOKOnly)
End Sub