Notifications
Clear all

Extrair Valores AlfaNumericos de Listbox

16 Posts
3 Usuários
0 Reactions
3,973 Visualizações
(@chook)
Posts: 197
Reputable Member
Topic starter
 

Amigos estou com um problema! Novidade :)

Vamos lá, tenho uma rotina, que segue abaixo, que retira do listbox2 a 1 coluna e lança este valor na planilha. A linha que faz isso no código abaixo é: ActiveCell.Offset(0, 11).Value = Val(ListBox2.List(i))

A questão e que ele não adiciona valores que não sejam apenas números, exemplo, 0001A. O que devo alterar para que a rotina funcione perfect?

Abraços a todos!

Private Sub CommandButton3_Click()
Dim i, j, x, UltimaLinha As Integer
Dim frete As Double
Const FOR_READING = 1
Const FOR_WRITING = 2
Const FOR_APPENDING = 8

    For i = 0 To ListBox2.ListCount - 1
        If ListBox2.List(i) = True Then
                Sheets("Contas_Pagar").Activate 'Seleciona a planilha Banco
                Range("3:3").Select 'Seleciona a Linha 2 para inserção de nova linha
                Selection.Insert Shift:=xlDown 'Insere uma linha e coloca o banco para baixo
                Range("A3").Select 'Seleciona a primeira celula da base para inserção de dados

                ActiveCell.Value = Range("A4").Value + 1
                ActiveCell.Offset(0, 1).Value = "GRAFICA E EDITORA REVENDA PRINT LTDA"
                ActiveCell.Offset(0, 2).Value = CDate(Now)
                ActiveCell.Offset(0, 6).Value = CDbl(ListBox2.List(i, 2))

    If datavencimento.Value = "" Then
        MsgBox "Data de Vencimento exigida!"
        Exit Sub
    Else
        ActiveCell.Offset(0, 8).Value = CDate(datavencimento.Value)
    End If
    If dataenvio.Value = "" Then
        MsgBox "Data de Envio exigida!"
        Exit Sub
    Else
        ActiveCell.Offset(0, 13).Value = CDate(dataenvio.Value)
    End If

ActiveCell.Offset(0, 9).Value = historico.Text
ActiveCell.Offset(0, 10).Value = "ABERTA"
ActiveCell.Offset(0, 11).Value = Val(ListBox2.List(i))
grades = grades & Val(ListBox2.List(i)) & ", "
x = i
        End If
    Next

'lançamento do frete

frete = Application.InputBox("Informe o valor do Frete para o Envio com data " & dataenvio.Value, "Valor do Frete")

                Sheets("Contas_Pagar").Activate 'Seleciona a planilha Banco
                Range("3:3").Select 'Seleciona a Linha 2 para inserção de nova linha
                Selection.Insert Shift:=xlDown 'Insere uma linha e coloca o banco para baixo
                Range("A3").Select 'Seleciona a primeira celula da base para inserção de dados
                ActiveCell.Value = Range("A4").Value + 1
                ActiveCell.Offset(0, 1).Value = "GRAFICA E EDITORA REVENDA PRINT LTDA"
                ActiveCell.Offset(0, 2).Value = CDate(Now)
                ActiveCell.Offset(0, 6).Value = CDbl(frete)
                ActiveCell.Offset(0, 8).Value = CDate(datavencimento.Value)
                ActiveCell.Offset(0, 9).Value = "FRETE - " & historico.Text & " - " & grades
                ActiveCell.Offset(0, 10).Value = "ABERTA"
                'ActiveCell.Offset(0, 11).Value = Val(ListBox2.List(x))
                ActiveCell.Offset(0, 13).Value = CDate(dataenvio.Value)

ActiveWorkbook.Save

MsgBox "Lançamento realizado com sucesso!"

End Sub
 
Postado : 30/03/2012 1:58 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Chook, não entendi. Val(ListBox2.List(i), vai "ler" a string recebida e identificar(ou tentar) os numeros nessa string, então se Vc deseja adicionar valores numericos e/ou não numericos tb; tire a função "Val"; assim irá incluir o valor que receber "ActiveCell.Offset(0, 11).Value = ListBox2.List(i)"

 
Postado : 30/03/2012 2:16 pm
(@chook)
Posts: 197
Reputable Member
Topic starter
 

Eu também tinha pensado assim, mas continua sem funcionar!

 
Postado : 30/03/2012 2:40 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Tente algo..

If ListBox2.Selected(i) = True then
 
Postado : 30/03/2012 3:38 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Chook, alem da dica do Reinaldo, no inico da rotina o (i) está declarado como INTEGER, separe as declarações :
Dim i, j, x, UltimaLinha As Integer
Diexando cada uma em uma linha separada, e não defina o tipo de (i), deixando - Dim i - somente.

Outra dica coloque algumas msgbox para ver qual os valores está retornando :

Antes desta linha :
MsgBox Val(ListBox2.List(i))
ActiveCell.Offset(0, 11).Value = Val(ListBox2.List(i))

Se ainda não retornar corretamente, verifique que tipo está definido quando do carregamento do ListBox.

[]s

 
Postado : 30/03/2012 4:51 pm
(@chook)
Posts: 197
Reputable Member
Topic starter
 

Bom dia amigos,
fiz as correções abaixo e continua se comportando da mesma forma. Envio em anexo a planilha, quando abrir o form, selecione uma grade apenas numerica, depois clique em incluir, o valor será enviado para o listbox2 abaixo e depois informe a data de envio, depois clique em lançar conta, será solicitado o valor do frete. Verifique que os dois lançamentos estão na planilha de contas a pagar. Repita a operação agora com uma grade alfanumerica e veja que só vai o frete! Não tenho a menor ideia do que fazer! :?: :!:

Grande abraço a todos!

Dim i As Integer
Dim j As Integer
Dim x As Integer
Dim UltimaLinha As Integer
Dim frete As Double

Const FOR_READING = 1
Const FOR_WRITING = 2
Const FOR_APPENDING = 8

    For i = 0 To ListBox2.ListCount - 1
        If ListBox2.Selected(i) = True Then
                Sheets("Contas_Pagar").Activate 'Seleciona a planilha Banco
                Range("3:3").Select 'Seleciona a Linha 2 para inserção de nova linha
                Selection.Insert Shift:=xlDown 'Insere uma linha e coloca o banco para baixo
                Range("A3").Select 'Seleciona a primeira celula da base para inserção de dados

                ActiveCell.Value = Range("A4").Value + 1
                ActiveCell.Offset(0, 1).Value = "GRAFICA E EDITORA REVENDA PRINT LTDA"
                ActiveCell.Offset(0, 2).Value = CDate(Now)
                ActiveCell.Offset(0, 6).Value = CDbl(ListBox2.List(i, 2))

    If datavencimento.Value = "" Then
        MsgBox "Data de Vencimento exigida!"
        Exit Sub
    Else
        ActiveCell.Offset(0, 8).Value = CDate(datavencimento.Value)
    End If
    If dataenvio.Value = "" Then
        MsgBox "Data de Envio exigida!"
        Exit Sub
    Else
        ActiveCell.Offset(0, 13).Value = CDate(dataenvio.Value)
    End If

ActiveCell.Offset(0, 9).Value = historico.Text
ActiveCell.Offset(0, 10).Value = "ABERTA"
ActiveCell.Offset(0, 11).Value = ListBox2.List(i)   'Val(ListBox2.List(i))
grades = grades & ListBox2.List(i) & ", " 'Val(ListBox2.List(i))
x = i
        End If
    Next

'lançamento do frete

frete = Application.InputBox("Informe o valor do Frete para o Envio com data " & dataenvio.Value, "Valor do Frete")

                Sheets("Contas_Pagar").Activate 'Seleciona a planilha Banco
                Range("3:3").Select 'Seleciona a Linha 2 para inserção de nova linha
                Selection.Insert Shift:=xlDown 'Insere uma linha e coloca o banco para baixo
                Range("A3").Select 'Seleciona a primeira celula da base para inserção de dados
                ActiveCell.Value = Range("A4").Value + 1
                ActiveCell.Offset(0, 1).Value = "GRAFICA E EDITORA REVENDA PRINT LTDA"
                ActiveCell.Offset(0, 2).Value = CDate(Now)
                ActiveCell.Offset(0, 6).Value = CDbl(frete)
                ActiveCell.Offset(0, 8).Value = CDate(datavencimento.Value)
                ActiveCell.Offset(0, 9).Value = "FRETE - " & historico.Text & " - " & grades
                ActiveCell.Offset(0, 10).Value = "ABERTA"
                'ActiveCell.Offset(0, 11).Value = Val(ListBox2.List(x))
                ActiveCell.Offset(0, 13).Value = CDate(dataenvio.Value)

ActiveWorkbook.Save

MsgBox "Lançamento realizado com sucesso!"

End Sub
 
Postado : 02/04/2012 5:46 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Chook
Estou olhando sua planilha, e conforme a linha "ActiveCell.Offset(0, 6).Value = CDbl(frete)" esse é o ultimo valor cadastrado na Planilha "Contas a Pagar", se o objetivo é a soma dos valores obtidos em ListiBox2 mais Frete então
a linha deveria ser(creio eu): ActiveCell.Offset(0, 6).Value = CDbl(frete)+CDbl(ListBox2.List(i, 2))

Private Sub CommandButton3_Click()
Dim i As Integer
Dim j As Integer
Dim x As Integer
Dim UltimaLinha As Integer
Dim frete As Double

Const FOR_READING = 1
Const FOR_WRITING = 2
Const FOR_APPENDING = 8
    For i = 0 To ListBox2.ListCount - 1
        If ListBox2.Selected(i) = True Then
                Sheets("Contas_Pagar").Activate 'Seleciona a planilha Banco
                Range("3:3").Select 'Seleciona a Linha 2 para inserção de nova linha
                Selection.Insert Shift:=xlDown 'Insere uma linha e coloca o banco para baixo
                Range("A3").Select 'Seleciona a primeira celula da base para inserção de dados

                ActiveCell.Value = Range("A4").Value + 1
                ActiveCell.Offset(0, 1).Value = "GRAFICA E EDITORA REVENDA PRINT LTDA"
                ActiveCell.Offset(0, 2).Value = CDate(Now)
                ActiveCell.Offset(0, 6).Value = CDbl(ListBox2.List(i, 2))  ' AQUI ALTERA VALOR PARA VALOR DO LISTBOX2

    If datavencimento.Value = "" Then
        MsgBox "Data de Vencimento exigida!"
        Exit Sub
    Else
        ActiveCell.Offset(0, 8).Value = CDate(datavencimento.Value)
    End If
    If dataenvio.Value = "" Then
        MsgBox "Data de Envio exigida!"
        Exit Sub
    Else
        ActiveCell.Offset(0, 13).Value = CDate(dataenvio.Value)
    End If

ActiveCell.Offset(0, 9).Value = historico.Text
ActiveCell.Offset(0, 10).Value = "ABERTA"
ActiveCell.Offset(0, 11).Value = ListBox2.List(i)   'Val(ListBox2.List(i))
grades = grades & ListBox2.List(i) & ", " 'Val(ListBox2.List(i))
x = i
        End If
    Next

'lançamento do frete

frete = Application.InputBox("Informe o valor do Frete para o Envio com data " & dataenvio.Value, "Valor do Frete")

                Sheets("Contas_Pagar").Activate 'Seleciona a planilha Banco
                Range("3:3").Select 'Seleciona a Linha 2 para inserção de nova linha
                Selection.Insert Shift:=xlDown 'Insere uma linha e coloca o banco para baixo
                Range("A3").Select 'Seleciona a primeira celula da base para inserção de dados
                ActiveCell.Value = Range("A4").Value + 1
                ActiveCell.Offset(0, 1).Value = "GRAFICA E EDITORA REVENDA PRINT LTDA"
                ActiveCell.Offset(0, 2).Value = CDate(Now)
                ActiveCell.Offset(0, 6).Value = CDbl(frete)                                                       ' AQUI ALTERA VALOR PARA VALOR DO FRETE
                ActiveCell.Offset(0, 8).Value = CDate(datavencimento.Value)
                ActiveCell.Offset(0, 9).Value = "FRETE - " & historico.Text & " - " & grades
                ActiveCell.Offset(0, 10).Value = "ABERTA"
                'ActiveCell.Offset(0, 11).Value = Val(ListBox2.List(x))
                ActiveCell.Offset(0, 13).Value = CDate(dataenvio.Value)

ActiveWorkbook.Save

MsgBox "Lançamento realizado com sucesso!"

End Sub
 
Postado : 02/04/2012 6:32 am
(@chook)
Posts: 197
Reputable Member
Topic starter
 

Não o frete é separado mesmo. Conseguiu achar o meu erro?

Abraços!

 
Postado : 02/04/2012 6:40 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

O unico valor que vc manda para a planilha e o frete, então qual outro valor deverá ir e onde?

 
Postado : 02/04/2012 6:51 am
(@chook)
Posts: 197
Reputable Member
Topic starter
 

Antes é enviado todas as grades que forem selecionadas no listbox1 para o listbox2. Selecione a grade e clique em incluir que verás que ao informar a data de envio, e depois clicar em lançar conta, ele lançará todas as grades informadas, valor a valor e depois para o grupo de grades será lançado o frete.

 
Postado : 02/04/2012 6:54 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Chook,
Seguindo seu procedimento:
Selecionar no Combo "Grade" um valor,
clicar em "Pesquisar", no listbox filtra os itens para aquela grade e no label custo correto terá a somatoria desses itens.
clicar em incluir, então o valor da somatoria "label custo" será "enviado" ao listbox2
Preencher a data envio - ao sair, a data vencimento é calculada;
clicar em "Lancar Conta" temos duas situações (independemtemente se for numerico ou alfaNumerico):
Se houver sido selecionado a linha em listbox2, o valor da linha e incluido e logo após o valor do frete informado;
Se não houver seleção no listbox2, somente o valor do frete informado e preenchido.
Então aparentemente o "erro" está em não selecionar o item no list...

 
Postado : 02/04/2012 7:34 am
(@chook)
Posts: 197
Reputable Member
Topic starter
 

Grande Reinaldo, está quase tudo correto, porém, não há necessidade de selecionar os itens em listbox2 para que seja lançado as contas a pagar, se testar a rotina com grades numericas verás que está funcionando.

Entendeu?

 
Postado : 02/04/2012 8:21 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Entendi, porem aqui comigo, inclusive as grades numericas, se não selecionar não inclui.
Faça algo assim:
Logo apos a linha:
gradesselecionadas.Value = Val(gradesselecionadas.Value) + 1
Inclua:
For y = 1 To gradesselecionadas
ListBox2.Selected(y) = True
Next

 
Postado : 02/04/2012 9:01 am
(@chook)
Posts: 197
Reputable Member
Topic starter
 

Reinaldo, não lembro quando fiz esta alteração, mas é verdade tem que selecionar agora! :/

Está funcionando...Selecionando...mistério!

Valeu Reinaldo, olho de especialista!!

Forte abraço!

 
Postado : 02/04/2012 11:45 am
(@rodrigojacinto)
Posts: 73
Estimable Member
 

Bom dia
Amigos tenho um listbox que recebe as informações de uma pesquisa feita no banco, queria montar tipo um sistema de relatorio com isso, eu deixaria ex> plan1 relatorio_de_vendas, (e faria la um relatorio deichando os espaços para receber as informações da listbox) pois a pesquisa ela retorna na listbox o codigo do vendedor, nome, produto vendido, valor e outros dados, e quando clicado com clique duplo se possivel na listbox eles preenchecem esse relatorio com as informações da linha clicada, seria possivel?

 
Postado : 20/06/2012 5:15 am
Página 1 / 2