Usuário com melhor resposta
Alterando dados pelo Listbox

Pergunta
-
Boa tarde.
estou criando um controle de chamados no excel, onde eu abro o chamado na própria planilha do excel, e fecho em um Form com um listbox e uns textbox.
Acontece que qdo eu altero os valores no textbox e clico no botão pra atualizar, só é alterado um range o resto não.
esse é o cod.
I = (ListBox1.ListIndex + 2)
If resposta = vbYes And I >= 2 Then
atual_lista = True
Sheets("Historico").Cells(I, 1) = txtIncidente.Text
Sheets("Historico").Cells(I, 2) = txtSolucao.Text
Sheets("Historico").Cells(I, 3) = cmbStatus.Text
Sheets("Historico").Cells(I, 4) = cmbEncaminhado.Text
Sheets("Historico").Cells(I, 5) = cmbFechamento.TextSó que neste caso só esta alterando o valor do "txtincidente" do resto não.
Alguem pode me ajudar a resolver esta questão.
Obrigado.
Respostas
-
Oi Anderson,
o mais importante é justamente "debugar" o código para entender o que exatamente ele está fazendo. Desta forma, você mesmo encontrou a solução.
Abs!
- Sugerido como Resposta Felipe Costa GualbertoMVP, Moderator domingo, 15 de junho de 2014 13:50
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator domingo, 15 de junho de 2014 13:50
Todas as Respostas
-
Fala, Anderson, Blz?
Então, kra, eu testei seu código aki e funcionou bunitinho...
I = (ListBox1.ListIndex + 2)
resposta = MsgBox("Continuar?", vbYesNo) ' Eu adicionei essa linha para a variável receber o 'valor da resposta da MsgBox
If resposta = vbYes And I >= 2 Then
atual_lista = True
Sheets("Historico").Cells(I, 1) = txtIncidente.Text
Sheets("Historico").Cells(I, 2) = txtSolucao.Text
Sheets("Historico").Cells(I, 3) = cmbStatus.Text
Sheets("Historico").Cells(I, 4) = cmbEncaminhado.Text
Sheets("Historico").Cells(I, 5) = cmbFechamento.Text
End IfCriei o formulário, selecionei um item da list box, entrei com os dados nas textBoxes e nas Combos e rolou sussa!
Qq coisa, posta aí dnovo q nóis vê no q pode ajudar!
Abraço!
-
Oi boa tarde;
Cara realmente não sei o que eu estou fazendo de errado, pois este código que eu passei eu retirei de uma outra macro, e funciona direitinho, vc fez um teste e tbm funcionou.
Será que é o evnto click do LisBox que esta errado?
segue o cod. que eu uso para o evento.
Private Sub ListBox1_Click()
Dim I As Integer
I = ListBox1.ListIndex
If I >= 0 Then
txtIncidente.Text = ListBox1.List(I, 0)
txtSolucao.Text = ListBox1.List(I, 1)
cmbStatus.Text = ListBox1.List(I, 2)
cmbEncaminhado.Text = ListBox1.List(I, 3)
cmbFechamento.Text = ListBox1.List(I, 4)
End If
End SubQualquer coisa eu disponibilizei um novo teste que acabei de fazer no seguinte link.
http://www.dantinoeadvogados.com.br/teste.xls
assim vc poderá me dizer noque eu estou errando.
Muito obrigado mesmo.
-
-
Oi bom dia.
Luis fiz o que vc pediu, coloquei um ponto de interrupção no começo do codigo, e descobri o seguinte.
Qdo eu clico no botao pra atualizar os dados, ele passa para a primeira linha do cod. Sheets("Historico").Cells(I, 1) = txtIncidente.Text, e passa 2 vezes pelo evento click do listbox antes de passar para a proxima linha Sheets("Historico").Cells(I, 3) = cmbStatus.Text.
E assim sucessivamente ate chegar a ultima linha, só que como ele passa pelo evento click do listbox primeiro, qdo ele vai alterar os outros valores nao altera nada, pois os textbox esta com o valor antigo.
Sera que tem como solucionar isto. Derrepente colocar os txtbox em variaveis, ou fazer com que não seje passado para o evento click do listbox antes de serem alterados todos os valores.
Desde já obrigado a todos que me deram as dicas, e se puderem dar mais esta eu agradeceria.
Ate mais.
-
Oi pessoal;
Obrigado pela atenção de todos, consegui resolver o meu problema utilizando uma idéia que eu perguntei ao Luis se funcionava,(jogar os valores em variaveis), e funcionou bem pra caramba.
Segue o cod completo como ficou, não sei se é o certo, mas funcionou muito bem , se alguem tiver outra ideia aceito sugestoes.
Option Explicit
Dim Incidente, Resposta, Status, Encaminhado, FechamentoPrivate Sub cmdAtualiza_Click()
Dim I As Integer
I = (ListBox1.ListIndex + 2)
Incidente = txtIncidente.Text
Solucao = txtSolucao.Text
Status = cmbStatus
Encaminhado = cmbEncaminhado
Fechamento = cmbFechamento
Resposta = MsgBox("Continuar?", vbYesNo) ' Eu adicionei essa linha para a variável receber o 'valor da resposta da MsgBox
If Resposta = vbYes And I >= 2 Then
Sheets("Historico").Cells(I, 1) = Incidente
Sheets("Historico").Cells(I, 2) = Solucao
Sheets("Historico").Cells(I, 3) = Status
Sheets("Historico").Cells(I, 4) = Encaminhado
Sheets("Historico").Cells(I, 5) = Fechamento
End If
End SubPrivate Sub ListBox1_Click()
Dim I As Integer
I = ListBox1.ListIndex
If I >= 0 Then
txtIncidente.Text = ListBox1.List(I, 0)
txtSolucao.Text = ListBox1.List(I, 1)
cmbStatus.Text = ListBox1.List(I, 2)
cmbEncaminhado.Text = ListBox1.List(I, 3)
cmbFechamento.Text = ListBox1.List(I, 4)
End If
End SubMais uma ves muito obrigado.
-
Oi Anderson,
o mais importante é justamente "debugar" o código para entender o que exatamente ele está fazendo. Desta forma, você mesmo encontrou a solução.
Abs!
- Sugerido como Resposta Felipe Costa GualbertoMVP, Moderator domingo, 15 de junho de 2014 13:50
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator domingo, 15 de junho de 2014 13:50
-
Desculpe ter demorado pra responder, fiquei um tempo fora do ar.
Mas vim justamente comentar que foi de muita ajuda as opções que vcs me deram, e que qdo eu precisar de opniões de qualida já sei onde procurar.
Muito obrigado e ate a próxima.
-
Aconteceu comigo tbm, gostaria de saber pq ele passa 2 vezes pelo evento click do listbox antes de passar para a proxima linha.
Observei que acontece quando definimos a tabela RowSource da listbox quando inicia o carregamento.
ou seja, ou nas propriedade da listbox definimos a tabela na RowSource ou no UserForm_Initialize definindo como
ListBox1.RowSource = "Plan1!A2:D20"
carregará os dados que estiver neste intervalo, sem a necessidade de while ou for, etc.
só não consegui entender o motivo de passar 2 vezes pelo evento click.