VBA - FILTRO COM 3 CRITÉRIOS

ALANTB 19/07/2017 16:35:36
#475293
Olá, tenho um sistema em VBA EXCEL 2016 que usa as plans como tabelas. Criei também forms para manutenção de dados (incluir, editar,..). Em uma plan tem as seguintes colunas para gravar informações de Certificados de Cursos :

codCert | Matricula |Curso | Entidade | CargaHoraria | DtCurso | nroPontos

Tá cadastrando e editando blza, entretanto, preciso de uma rotina que verifique, antes de GRAVAR, os dados cadastrados da matricula que está sendo incluída. Isto serve para evitar que uma MATRICULA já tenha cadastrada um mesmo CURSO, na mesma DATA , ou seja, o mesmo curso duas vezes para mesma pessoa.
Tentei a rotina abaixo de várias maneiras, eventos e botões, mas não faz a seleção correta. Preciso que se achar um registro igual, mostre msg que já existe e interrompa a gravação. Segue....

Private Sub txtDtCurso_Exit(ByVal Cancel As MSForms.ReturnBoolean)

[ô]Sheets([Ô]rel[Ô]).Range([Ô]A2:K50000[Ô]).ClearContents
ultimaLinha = Certificado.Cells(Rows.Count, [Ô]a[Ô]).End(xlUp).Row
ultimaColuna = Certificado.Cells(1, Columns.Count).End(xlToLeft).Column
linha = 2

For X = 2 To ultimaLinha
If Certificado.Cells(X, 2) = (txtMatricula.Value) And Certificado.Cells(X, 3) = (ComboBox_Curso.Value) And Certificado.Cells(X, 6) = (txtDtCurso.Value) Then [ô] NOS TXT DEVE CONTER OS VALORES DO FILTRO
For i = 1 To ultimaColuna

[ô] Plan2.Cells(linha, i) = Plan1.Cells(X, i)
MsgBox [Ô]Certificado já cadastrado para esse funcionário!![Ô], vbExclamation, [Ô]Atenção[Ô]
Next
linha = linha + 1
[ô] MsgBox [Ô]Certificado já cadastrado para esse funcionário!![Ô], vbExclamation, [Ô]Atenção[Ô]
End If
Next

End Sub

Alan
KERPLUNK 19/07/2017 16:38:39
#475294
Resposta escolhida
Use a watch window e verifique o conteúdo de Certificado.Cells(X, 6) e (txtDtCurso.Value), quase que certeza que o problema está aí. Coloque um breakpoint nessa linha de if e veja os valores de cada linha da planilha.
ALANTB 20/07/2017 21:06:34
#475336
KERPLUNK, verificando com mais atenção, consegui resolver. Agora está funcionando e filtrando com os 3 critérios dos textbox da SUB abaixo. Agora falta direcionar o usuário quando o registro já existe. Valeu pela atenção.Estou encerrando..

Private Sub txtDtCurso_Exit(ByVal Cancel As MSForms.ReturnBoolean)

ultimaLinha = Certificado.Cells(Rows.Count, [Ô]a[Ô]).End(xlUp).Row
ultimaColuna = Certificado.Cells(1, Columns.Count).End(xlToLeft).Column
linha = 2

For X = 2 To ultimaLinha
If Certificado.Cells(X, 2) = txtMatricula.Text And Certificado.Cells(X, 3) = ComboBox_Curso.Text And Certificado.Cells(X, 6) = txtDtCurso.Text Then
For i = 1 To ultimaColuna

Next

MsgBox [Ô]Certificado já cadastrado para esse funcionário!![Ô], vbExclamation, [Ô]Atenção[Ô]

linha = linha + 1

End If
Next

End Sub

Alan
Tópico encerrado , respostas não são mais permitidas