Notifications
Clear all

Macro não retorna os dados procurados não existem

8 Posts
4 Usuários
0 Reactions
994 Visualizações
(@sulamita)
Posts: 0
New Member
Topic starter
 

Olá, bom dia a todos.
Tenho o código abaixo, que faz uma procura na planilha 3 e retorna os dados procurados na planilha 1. É uma triplice procura. Baseia-se em procurar um nome vinculado a uma data inicial e outra data final. Está funcionando quase perfeitamente, só tem um porém : quando a procura não encontra nenhum dado, mesmo assim a macro informa: "Os dados solicitados estão prontos". Gostaria que, nesse caso, a macro informa-se que nada foi encontrado. Alguém pode me ajudar? Grata.
Eis o código:
Sub GerarHistorico()
ActiveSheet.Unprotect (123)
Application.ScreenUpdating = False
'Application.EnableEvents = False
Sheets("HistoricoEscolar").Select
Dim lastRow As Long
Dim lastResultRow As Long
Dim x As Long
' Verifica qual a ultima célula preenchida
lastRow = Plan3.Cells(Rows.Count, 2).End(xlUp).Row 'Planilha 26 Controle Total, Col B
' Apaga valores anteriores
Plan1.Range("a12:G50").ClearContents
Plan1.Range("a52:G65").ClearContents
lastResultRow = 12 'O resultado sera colocada a partir da linha 12 da Planilha 1 Histórico Escolar

' Ciclo em todas as linhas

For x = 11 To lastRow 'a linha 11 é a primeira Linha dos dados da pequisa (Plan 3 Controle Total)

If Plan3.Cells(x, 4).Value >= CDate(Plan1.Range("j3")) And Plan3.Cells(x, 4) <= CDate(Plan1.Range("j4")) And Plan3.Cells(x, 16) = Plan1.Range("j2").Value Then '1 coluna pequisa
'Dados, dtas Relatorio, Data Inicial Dados, datas Relatorio, Data Final Dados,alunos Relatorio Aluno

'Plan 1 HistóricoEscolar Plan 3 Controle Total

Plan1.Cells(lastResultRow, 1).Value = Plan3.Cells(x, 2).Value 'Ano
Plan1.Cells(lastResultRow, 2).Value = Plan3.Cells(x, 3).Value 'Semestre
Plan1.Cells(lastResultRow, 3).Value = Plan3.Cells(x, 8).Value 'Disciplina
Plan1.Cells(lastResultRow, 4).Value = Plan3.Cells(x, 9).Value 'Sigla
Plan1.Cells(lastResultRow, 5).Value = Plan3.Cells(x, 14).Value 'Carga Horaria
Plan1.Cells(lastResultRow, 6).Value = Plan3.Cells(x, 17).Value ' Média da notas
Plan1.Cells(lastResultRow, 7).Value = Plan3.Cells(x, 18).Value 'Situação

lastResultRow = lastResultRow + 1
End If
Next

MsgBox ("Os dados solicitados estão prontos")

ActiveSheet.Protect (123)
Application.ScreenUpdating = True

End Sub

 
Postado : 05/05/2016 5:54 am
(@basole)
Posts: 487
Reputable Member
 

sulamita,
veja se isso resolve:

Sub GerarHistorico()
    ActiveSheet.Unprotect (123)
    Application.ScreenUpdating = False
    'Application.EnableEvents = False
    Sheets("HistoricoEscolar").Select
    Dim lastRow As Long
    Dim lastResultRow As Long
    Dim x As Long
    Dim nStatus As Boolean
    ' Verifica qual a ultima célula preenchida
    lastRow = Plan3.Cells(Rows.Count, 2).End(xlUp).Row    'Planilha 26 Controle Total, Col B
    ' Apaga valores anteriores
    Plan1.Range("a12:G50").ClearContents
    Plan1.Range("a52:G65").ClearContents
    lastResultRow = 12    'O resultado sera colocada a partir da linha 12 da Planilha 1 Histórico Escolar

    ' Ciclo em todas as linhas

    For x = 11 To lastRow    'a linha 11 é a primeira Linha dos dados da pequisa (Plan 3 Controle Total)

        If Plan3.Cells(x, 4).Value >= CDate(Plan1.Range("j3")) And Plan3.Cells(x, 4) <= CDate(Plan1.Range("j4")) And Plan3.Cells(x, 16) = Plan1.Range("j2").Value Then    '1 coluna pequisa
            'Dados, dtas Relatorio, Data Inicial Dados, datas Relatorio, Data Final Dados,alunos Relatorio Aluno


            'Plan 1 HistóricoEscolar Plan 3 Controle Total

            Plan1.Cells(lastResultRow, 1).Value = Plan3.Cells(x, 2).Value    'Ano
            Plan1.Cells(lastResultRow, 2).Value = Plan3.Cells(x, 3).Value    'Semestre
            Plan1.Cells(lastResultRow, 3).Value = Plan3.Cells(x, 8).Value    'Disciplina
            Plan1.Cells(lastResultRow, 4).Value = Plan3.Cells(x, 9).Value    'Sigla
            Plan1.Cells(lastResultRow, 5).Value = Plan3.Cells(x, 14).Value    'Carga Horaria
            Plan1.Cells(lastResultRow, 6).Value = Plan3.Cells(x, 17).Value    ' Média da notas
            Plan1.Cells(lastResultRow, 7).Value = Plan3.Cells(x, 18).Value    'Situação

            lastResultRow = lastResultRow + 1
            nStatus = True
        End If
    Next

    If nStatus = True Then MsgBox ("Os dados solicitados estão prontos")



    ActiveSheet.Protect (123)
    Application.ScreenUpdating = True


End Sub
 
Postado : 05/05/2016 6:45 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Olá.
Experimente substituir estas linhas

lastResultRow = lastResultRow + 1
End If
Next

MsgBox ("Os dados solicitados estão prontos")

por estas

lastResultRow = lastResultRow + 1
MsgBox ("Os dados solicitados estão prontos")
Else: MsgBox "nada foi encontrado"
End If
Next
 
Postado : 05/05/2016 6:45 am
(@sulamita)
Posts: 0
New Member
Topic starter
 

Amigos, Obrigado pela rapidez das respostas. Mas nenhumas das duas possiveis soluções deu certo.
A do Oswaldomp funcionou parcialmente, mas após retorna a mensagem de nada foi encontrado, continua repetindo um loop de "nada foi encontrado" por 10 vezes, até que após eu clicar para fechar 10 x, o loop para de vez.
a resposta do Basole, não retornou "nada foi encontrado", como era esperado.
Agradeço a ambos por sua dedicação e apoio. Poderiam tentar me ajudar mais uma vez?
obrigada.

 
Postado : 05/05/2016 1:26 pm
(@mprudencio)
Posts: 0
New Member
 

Disponibilize o arquivo

 
Postado : 05/05/2016 1:38 pm
(@sulamita)
Posts: 0
New Member
Topic starter
 

Ok, segue o arquivo.

 
Postado : 05/05/2016 2:04 pm
(@mprudencio)
Posts: 0
New Member
 

Ve se é isso

 
Postado : 05/05/2016 2:15 pm
(@sulamita)
Posts: 0
New Member
Topic starter
 

Ve se é isso

Muito obrigada MPrudencio, era exatamente o que eu queria. Que Deus o abençoe.

 
Postado : 05/05/2016 2:49 pm