VBA - FILTRO COM 3 CRITÉRIOS
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
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
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.
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
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