Notifications
Clear all

Ajuda Com VBA

51 Posts
2 Usuários
0 Reactions
6,755 Visualizações
(@aprendiz)
Posts: 80
Trusted Member
Topic starter
 

olá a todos estou com uma dúvida em VBA quero o seguinte tenho duas planilhas cadastro e backup e tem um userforme com multipaginas contendo cada pagina um combobox, dois botões ativar aluno e desativar aluno e uma textbox. na combobox terá o nome de todos os alunos que estão na planilha cadastro e quando eu pesquisar um aluno na combobox ele me mostre na textbox o nome e quando eu clicar em desativar aluno ele pegue todos os dados do aluno e jogue na planilha backup e o outro botao ativar aluno pegue os dados que estaoo no backup jogue de volta para a planilha cadastro e quando ele estiver desativado mostre na listbox todos os dados dele e o nome dele em vermelho vou disponibilizar modelo da planilha so preciso do código dos botões e sim se tem como fazer a combobox mostrar so o que ta na planilha tirara essas linhas em branco tem o modelo abaixo da planilha

 
Postado : 07/12/2014 11:55 am
selmo
(@selmo)
Posts: 236
Estimable Member
 

Então, estava olhando a planilha e percebi um pequeno equivoco, então, nessa parte do código você faz referencia ao nome do formulário, então ao invés de

 FrmDadosListView.ListView2.ListItems.Count

enquanto o correto seria assim pagamento.ListView2.ListItems.Count, sendo que pagamento é o nome do seu formulário. E tambem fiz alguma pequenas alterações no código, como adicionar o evento ItemClick no listview, assim os dados seram copiados para as Textbox equivalentes, facilitando a edição, e tambem ao selecionar o aluno no combobox (já configurado), será filtrado os dados e carregados nas textbox. Qualquer coisa dá um toque.

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."
Albert Einstein

 
Postado : 09/12/2014 11:16 am
(@aprendiz)
Posts: 80
Trusted Member
Topic starter
 

SELMO MEU BROTHER TA PERFEITO FUNCIONANDO PERFEITAMENTE SÓ ME TIRA UMA DÚVIDA VC SE LEMBRA QUE EU QUERIA ANTES QUE O ALUNO DESATIVADO FOSSE RECORTADO DA PLANILHA BANCODEDADOS PARA UMA OUTRA PLANILHA PARA QUE NA HORA QUE EU FOSSE FAZER A FILTRAGEM POR EXEMPLO DE ALUNOS MATRICULADOS ESSE ALUNO DESATIVADO NAO FIZESSE PARTE E VC DEU ESSA IDEIA ÓTIMA QUE TE AGRADECO MUITO AGORA EU QUERIA SABER SE COM O STATUS DE DESATIVADO NAO PRECISA NEM RECORTAR E COLAR EM OUTRO CANTO MAS TEM COMO COM ESSE ESTATUS ELE NAO FAZER A CONTAGEM VC DISSE LÁ ATRAS QUE EU FIZESSE O SEGUINTE
SUBSTITUÍ-SE ESSE CÓDIGO

TextBox1 = ListBox4.ListCount - 1

POR ESSE

Dim Ws as Worksheet
Dim linhafinal as Long

Set ws = Sheets("Bancodedados") 'Nome da planilha a qual será usada para contagem
linhafinal = ws.Cells(Rows.Count, 1).End(xlUp).Row 'Coluna A, verificar a ultima linha preenchida

For i = 2 To linhafinal
If ws.Range("A" & i).Text = "Ativado" Then 'Substitua pela coluna a qual obterá o valor Ativado
ValorAtivado = ValorAtivado + 1

End If
i = i + 1 - 1
Next
TextBox1.Text = ValorAtivado

EU ATE FIZ SÓ QUE NAO DEU CERTO A TEXTBOX ESTÁ EM BRANCO SERÁ QUE ERREI ALGO.É NA PARTE QUE FILTRA ALUNOS MATRICULADOS

 
Postado : 09/12/2014 6:32 pm
(@aprendiz)
Posts: 80
Trusted Member
Topic starter
 

ei deu certo eu que tava errado desculpe ai. mas só tem uma coisinha tem como esse aluno desativado nao aparecer na lista só isso mesmo que falta. eu acho rsrsrs

 
Postado : 09/12/2014 6:54 pm
(@aprendiz)
Posts: 80
Trusted Member
Topic starter
 

ei deu certo eu que tava errado desculpe ai. mas só tem uma coisinha tem como esse aluno desativado nao aparecer na lista só isso mesmo que falta. eu acho rsrsrs

como eu disse eu acho ta dando pro na parte de consulta por materia ta contando os desativados

 
Postado : 09/12/2014 7:10 pm
(@aprendiz)
Posts: 80
Trusted Member
Topic starter
 

Selmo esquece esse negocio de ocultar os alunos desativados isso é irrelevante aqui para empresa, mas tem duas coisas importantes e precisava da sua ajuda tomara que eu explique de um jeito que de para vc entender

1º vc me passou um novo jeito de contagem e esse novo jeito( que não conta os desativados) funciona perfeitamente, quando vou consultar os alunos matriculados. mas quando vou consultar por matéria(só os que fazem português pela manhã por exemplo) ele fica com o mesmo numero que aparece na textbox9 se aparece 2 fica dois para qualquer filtro.

2°na listbox onde está a consulta por matéria a primeira linha aparece: nome,telefone,curso,turno mas caso eu matricule o segundo aluno e vou lá na filtragem so aparecerá o nome do aluno eu queria que ficasse igual a primeira coluna para todos, esse segundo é o mais difícil para mim porque nã sei trabalhar com coleção da uma olhada nesse código ai

Private Sub CommandButton4_Click()
Dim clc As VBA.Collection
Dim l As Long
Dim l1 As Long
Dim s As String
Dim s1 As String
Dim s2 As String
Dim s3 As String
ListBox8.Clear
Set clc = New VBA.Collection
'With Sheets("Bancodedados").UsedRange
'ListBox8.ColumnCount = 4
'ListBox8.RowSource = .Address

With moSheet
'Armazena numa coleção todos os alunos disponíveis:
For l = 2 To mlLast
If .Cells(l, "M") Like "*" & ComboBox3 _
And .Cells(l, "N") Like "*" & ComboBox4 Then
On Error Resume Next

s = .Cells(l, "A")
s1 = .Cells(l, "L")
s2 = .Cells(l, "M")
s3 = .Cells(l, "N")

clc.Add s, s
'clc.Add s1, s1
'clc.Add s2, s2
'clc.Add s3, s3

On Error GoTo 0
End If
Next l
'Povoa a caixa de listagem de alunos:

End With

For l = 1 To clc.Count

ListBox8.AddItem clc(l)
ListBox8.List(0, 1) = (s1)
ListBox8.List(0, 2) = (s2)
ListBox8.List(0, 3) = (s3)

Next l
'End With
TextBox9.Text = l - 1
End Sub

esssa parte em vermelho foi eu que adcionei o que é que eu to errando Selmo

 
Postado : 10/12/2014 5:36 am
(@aprendiz)
Posts: 80
Trusted Member
Topic starter
 

:arrow:

 
Postado : 10/12/2014 5:48 am
selmo
(@selmo)
Posts: 236
Estimable Member
 

Substitua o código por este, ira comparar os dados antes de preencher a CmbAluno

Dim UltimaLinha As Long, area As New Collection
         Dim Value As Variant, temp() As Variant

         On Error Resume Next
         UltimaLinha = Plan1.Range("A" & Rows.Count).End(xlUp).Row
         temp = Plan1.Range("A2:A" & UltimaLinha).Value
        
         i = 2
         For Each Value In temp
             If Plan1.Range("A" & i) = "Ativado" And Len(Value) > 0 Then area.Add Value, CStr(Value)
             i = i + 1 ' na coluna A está o estatus Ativado ou Desativado
         Next Value
        
         For Each Value In area
             CmbAluno.AddItem Value
         Next Value

         Set area = Nothing

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."
Albert Einstein

 
Postado : 10/12/2014 11:14 am
(@aprendiz)
Posts: 80
Trusted Member
Topic starter
 

Selmo vc ta dizendo para substituir o código so não sei por qual me desculpa sou leigo mas seria assim?

na guia consulta por matéria eu clico no botão de pesquisa ai irá ter esse código

Private Sub CommandButton4_Click()
Dim clc As VBA.Collection
Dim l As Long
Dim l1 As Long
Dim s As String
Dim s1 As String
Dim s2 As String
Dim s3 As String
ListBox8.Clear
Set clc = New VBA.Collection
'With Sheets("Bancodedados").UsedRange
'ListBox8.ColumnCount = 4
'ListBox8.RowSource = .Address

With moSheet
'Armazena numa coleção todos os alunos disponíveis:
For l = 2 To mlLast
If .Cells(l, "M") Like "*" & ComboBox3 _
And .Cells(l, "N") Like "*" & ComboBox4 Then
On Error Resume Next

s = .Cells(l, "A")
s1 = .Cells(l, "L")
s2 = .Cells(l, "M")
s3 = .Cells(l, "N")
clc.Add s, s
'clc.Add s1, s1
'clc.Add s2, s2
'clc.Add s3, s3

On Error GoTo 0
End If
Next l
'Povoa a caixa de listagem de alunos:

End With

For l = 1 To clc.Count

ListBox8.AddItem clc(l)
ListBox8.List(0, 1) = (s1)
ListBox8.List(0, 2) = (s2)
ListBox8.List(0, 3) = (s3)

Next l

'End With
TextBox9 = l - 1

End Sub

ai eu pegaria todo aquele código que vc passou e substituiria por esse que ta em vermelho

 
Postado : 10/12/2014 4:42 pm
selmo
(@selmo)
Posts: 236
Estimable Member
 

Você quer pesquisar os alunos por matéria?

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."
Albert Einstein

 
Postado : 14/12/2014 3:32 pm
(@aprendiz)
Posts: 80
Trusted Member
Topic starter
 

sim Selmo por exemplo os alunos que estão matriculados so em português pela manha, só os que estão pela tarde e assim sucessivamente esta parte ja ta pronta eu queria que quando o alunos estivesse desativado ele nao aparecesse tambem na pesquisa por matéria tipo assim tenho 4 alunos em português pela manhã so que dois estão desativados quando eu fizesse o filtro aparecesse so na contagem os dois ativados do mesmo jeito que vc fez para os alunos matriculados nessa parte ta tudo certo e tem também na hora de consultar por matéria na primeira linha de listbox aparece nome,telefone,curso e turno mas so aparece na primeira quando e na outra so aparece nome queria que aparecesse em todos os alunos tem como vc da essa força brother vou disponibilizar a planilha ta na guia "CONSULTA POR MATÉRIA"

 
Postado : 14/12/2014 8:09 pm
selmo
(@selmo)
Posts: 236
Estimable Member
 

Veja se isso lhe atende

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."
Albert Einstein

 
Postado : 15/12/2014 1:30 pm
(@aprendiz)
Posts: 80
Trusted Member
Topic starter
 

Selmo brother ta bom demais vc solucionou a parte que so aparecia o nome ,valeu mesmo. agora só tem um pro na contagem, ta contando todos os ativados e eu quero por curso e turno. nessa plan que te vou disponibiliza agora na guia "CONSULTA POR MATÉRIA" tem uma pessoa matriculada em português a noite e uma a tarde"AMBAS ESTÃO ATIVADAS NA GUIA ATIVAR E DESATIVAR ALUNOS" ate então ele faz o filtro do jeito que eu quero, mas na contagem aparece 3 na textbox, são 3 porque tem 3 ativos"NA GUIA ATIVAR E DESATIVAR ALUNOS", so que era para aparecer 1 porque ele ta ativo nessa materia"PORTUGUÊS" e nesse turno"TARDE", caso eu desative ele na guia "ATIVAR E DESATIVAR ALUNOS" quando for consultar quem faz só português a tarde por exemplo ele nao apareceria na contagem "PORQUE NA GUIA ATIVAR E DESATIVAR ALUNO ELE ESTARIA DESATIVADO" tem como fazer isso?

 
Postado : 15/12/2014 4:38 pm
selmo
(@selmo)
Posts: 236
Estimable Member
 

Adicionei um contador direto no código, sempre que ele realizar um loop no filtro ele adiciona ao textbox o total ao final da rotina.

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."
Albert Einstein

 
Postado : 15/12/2014 5:52 pm
(@aprendiz)
Posts: 80
Trusted Member
Topic starter
 

Selmo brother ta muito bom ta do jeito que eu quero so me tira uma duvida na hora de consultar os alunos matriculados na guia "CONSULTAR MATRICULADOS" ele faz o filtro de todos os alunos e na contagem so aparece os ativados os desativados tem como ficar em vermelho para eu saber que esta desativa se puder me ajudar

 
Postado : 15/12/2014 6:36 pm
selmo
(@selmo)
Posts: 236
Estimable Member
 

Então, eu estava pesquisando e acredito que o listbox não tenha essa funcionalidade, porque não o substitui por um listview?

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."
Albert Einstein

 
Postado : 16/12/2014 7:36 am
Página 2 / 4