none
Alterando dados pelo Listbox RRS feed

  • 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.Text

    Só que neste caso só esta alterando o valor do "txtincidente" do resto não.

    Alguem pode me ajudar a resolver esta questão.

    Obrigado.

    quarta-feira, 13 de dezembro de 2006 15:47

Respostas

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 If

     

    Criei 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!

    sexta-feira, 15 de dezembro de 2006 12:13
  • 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 Sub

     

    Qualquer 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.

    sábado, 16 de dezembro de 2006 14:44
  • Oi Anderson,

    coloque um ponto de interrupção (F9) na primeira linha de seu código, e percorra linha a linha (teclando F8) para ver o caminho que ele está percorrendo e o valor que está atribuindo a cada célula.

    domingo, 17 de dezembro de 2006 00:36
    Moderador
  • 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.

    segunda-feira, 18 de dezembro de 2006 11:42
  • 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, Fechamento

    Private 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 Sub

    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 Sub

    Mais uma ves muito obrigado.

    segunda-feira, 18 de dezembro de 2006 13:39
  • 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!

    quinta-feira, 21 de dezembro de 2006 22:41
    Moderador
  • 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.

    quarta-feira, 10 de janeiro de 2007 19:51
  • 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.

    quinta-feira, 26 de junho de 2014 01:22