Eu estou tentando fazer uma macro para que cada linha que contenha "x" em uma determinada coluna, seja copiada para uma outra aba/planilha. O problema é que eu quero que esta informação seja copiada na próxima linha em branco da outra planilha.
Enfim, a minha macro está da seguinte forma até o momento (o erro de depuração está em negrito):
Sub CriarDerivadaCEB()
Const DerivadaCEB As String = "DerivadaCEB"
Const CEB As String = "CEB"
Const c_sCritério As String = "E"
Const c_lDados As Long = 2
Dim lDerivada As Long
Dim lCEB As Long
Dim wsDerivada As Worksheet
Dim wsCEB As Worksheet
With ThisWorkbook
'Apaga Planilha de Resumo, se existir
Application.DisplayAlerts = False
On Error Resume Next
.Sheets(DerivadaCEB).Delete
On Error GoTo 0
Application.DisplayAlerts = True
'Atribui variável à Planilha:
Set wsCEB = .Sheets(CEB)
'Cria Planilha de Resumo
Set wsDerivada = .Sheets.Add
'Cria cabeçalhos
With wsDerivadaCEB
.Name = c_sDerivadaCEB
wsCEB.Rows(1).Copy Destination:=.Rows(1)
End With
End With
lDerivadaCEB = c_lDados
For lCEB = c_lDados To RowLast(wsCEB.Columns(c_sCritério))
If wsCEB.Cells(lCEB, c_sCritério) = "X" Then
wsCEB.Rows(lCEB).Copy Destination:=wsDerivadaCEB.Cells(lCEB, "A")
lDerivadaCEB = lDerivadaCEB + 1
End If
Next lCEB
End Sub
Function RowLast(rng As Range) As Long
'Retorna o valor da última linha povoada do intervalo rng
With rng
On Error Resume Next
RowLast = .Find(What:="*" _
, After:=.Cells(1) _
, SearchDirection:=xlPrevious _
, SearchOrder:=xlByColumns _
, LookIn:=xlFormulas).Row
If RowLast = 0 Then RowLast = rng.Cells(1).Row
End With
End Function
Alguém pode me sugerir um outro código que faça isso ou solucionar este problema?
Muito obrigada!!