Declarar variavel d...
 
Notifications
Clear all

Declarar variavel de uma listbox em outro formulario

5 Posts
2 Usuários
0 Reactions
1,145 Visualizações
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Bom dia, tenho uma listbox em um formulario que ao dar dois cliques abre um novo formulario e que ao digitar uma senha executa um codigo que apaga o item selecionado na listbox, isso funciona muito bem.

A questao é que preciso limpar o conteudo da celula da coluna C que esta se referindo ao item apagado. (clearcontents)

Minha list box tem possuem 6 colunas nesta ordem

item (contador)
quantidade (valor da coluna c a limpar)
unidade
descrição produto (coluna que desejo atribuir a variavel)
preço unitario
preço total

Declarei uma variavel chamada produto e usando dessa forma "funciona", ou seja nao gera erro

Produto = FrmVendas.LBXPedido.Text

Esse foi o mais proximo que consegui de fazer funcionar.

Mas o valor que atribui é o indice que esta na primeira coluna, preciso que seja atribuido a coluna descrição mas as tentativas foram sem sucesso

Algumas tentativas

Produto = FrmVendas.LBXPedido.List(LBXPedido.ListIndex, 3)

Produto = FrmVendas.LBXPedido.List(LBXPedido.ListIndex, 3).Text

Neste caso da erro objeto é obrigatorio.

Produto = FrmVendas.LBXPedido(ListIndex, 3).Text

Tipos incompativeis 13

Outras tentativas tb nao deram certo.

Importante o formulario que esta a listbox é um e o formulario que esta o codigo é outro

Alguem ajuda a corrigir.

 
Postado : 29/05/2016 7:57 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Sem conhecer a estrutura fica um pouco dificil, mas pelo que entendi, para fazer um teste antes, associe a rotina abaixo ao evento clique do listbox (LBXPedido).

Lembrando que no VBA, a numeração inicia-se em "zero", então pelo que postou o item "descrição produto (coluna que desejo atribuir a variavel)" é a coluna "3" na rotina e a "4" que aparece no listbox.

Private Sub LBXPedido_Click()

    If FrmVendas.LBXPedido.ListCount = 0 Then
    
    Else
    
        Dim Item  As Double
        Dim Produto
    
        For Item = 0 To FrmVendas.LBXPedido.ListCount - 1
        
            If FrmVendas.LBXPedido.Selected(Item) = True Then
            
                MsgBox FrmVendas.LBXPedido.List(Item, 0) 'ITEM - Coluna 1 do ListBox
                MsgBox FrmVendas.LBXPedido.List(Item, 1) 'QDE - Coluna 2 do ListBox
                MsgBox FrmVendas.LBXPedido.List(Item, 2) 'UNID - Coluna 3 do ListBox
                MsgBox FrmVendas.LBXPedido.List(Item, 3) ' DESCRIÇÃO - Coluna 4 do ListBox
                MsgBox FrmVendas.LBXPedido.List(Item, 4) 'UNIT - Coluna 5 do ListBox
                MsgBox FrmVendas.LBXPedido.List(Item, 5) 'TT - Coluna 6 do ListBox
                
                Produto = FrmVendas.LBXPedido.List(Item, 3) ' DESCRIÇÃO - Coluna 4 do ListBox
                
                MsgBox Produto
            
            End If
        
        Next
    
    End If
    
End Sub

Faça os testes e veja se é isto.

[]s

 
Postado : 30/05/2016 10:23 am
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Mauro o form que preciso carregar a variavel nao é o mesmo que esta a listbox, usei dessa forma

Produto = FrmVendas.LBXPedido.List(Item, 3) porem sempre carrega na variavel o primeiro registro da listbox, e nao o selecionado.

A ideia é a seguinte:

Essa listbox recebe os dados da venda, a ideia é qdo dar dois cliques no item ele abre um novo formulario, que é digitado uma senha para confirmar a exclusão do item do pedido.

Excluir da listbox ja consegui agora preciso localizar o item selecionado na planilha para limpar os dados referentes a este item.

Apagar os dados tb ja esta resolvido mas a variavel nao carrega corretamente, como exemplifiquei.

O codigo que estou usando é esse:


Private Sub BTCancelar_Click()

Dim Senha As String
Dim Posição As Long
Dim Produto As String
Dim WM As Worksheet
Dim WMLinha As Long
Dim WMULinha As Long
Dim A As Long


    Set WM = Sheets("Movimento Estoque")
    Senha = "12345"
    WMLinha = 5
    WMULinha = WM.Range("A" & Rows.Count).End(xlUp).Row

If TxtSenha.Value = Senha Then

For A = WMLinha To WMULinha

    Produto = FrmVendas.LBXPedido.List(Item, 3) 'Tentativa conforme vc sugeriu
   Produto = FrmVendas.LBXPedido.Text ' Isso funciona na linha certa mas carrega a posição 0 da listbox e nao a 3

If WM.Cells(WMLinha, 1).Value = Produto Then

    WM.Cells(WMLinha, 3).Value = ""
    Exit For
    Else
    WMLinha = WMLinha + 1

End If

Next A


For Posição = FrmVendas.LBXPedido.ListCount - 1 To 0 Step -1

If FrmVendas.LBXPedido.Selected(Posição) Then
FrmVendas.LBXPedido.RemoveItem (FrmVendas.LBXPedido.ListIndex)
Exit For
End If

Next Posição

MsgBox "Item Cancelado", vbInformation, "Atenção"

Else

MsgBox "Senha Invalida", vbInformation, "Atenção"

End If


Unload Me
'AtualizaFrmVendas



End Sub


 
Postado : 30/05/2016 11:10 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Marcelo, como eu disse, estou indo por suposição conforme entendi as linhas da rotina.

Você adicionou em sua rotina uma linha da rotina que indiquei, mas somente ela "Produto = FrmVendas.LBXPedido.List(Item, 3) 'Tentativa conforme vc sugeriu", ignorando as instruções antes dela, ou seja, a Variável "item" alem de não estar declarada vai estar sempre vazia porque está ignorando : For Item = 0 To FrmVendas.LBXPedido.ListCount - 1 onde armazenamos o numero do item.

Se analisar bem a sua rotina, verá que você já tem instrução que faz a mesma coisa, mas para Remover o item do ListBox, seria o caso de ajustar ela no inicio e a Variável (posição) será a mesma coisa que o "item". Nele é verificado qtos itens temos no ListBox e qual o selecionado, e então atribuimos a Variável, é só questão de ajustar.
Mas deixando isto para você verificar melhor, troque sua rotina pela a abaixo e faça o teste.

Private Sub BTCancelar_Click()

    Dim Senha As String
    Dim Posição As Long
    Dim Produto As String
    Dim WM As Worksheet
    Dim WMLinha As Long
    Dim WMULinha As Long
    Dim A As Long

    Dim Item  As Double

        Set WM = Sheets("Movimento Estoque")
        Senha = "12345"
        WMLinha = 5
        WMULinha = WM.Range("A" & Rows.Count).End(xlUp).Row

    If TxtSenha.Value = Senha Then

    For A = WMLinha To WMULinha
        
        'Conta e Verifica o item selecionado
        For Item = 0 To FrmVendas.LBXPedido.ListCount - 1
            
            If FrmVendas.LBXPedido.Selected(Item) = True Then
            
            MsgBox FrmVendas.LBXPedido.List(Item, 3) ' DESCRIÇÃO - Coluna 4 do ListBox
            
            Produto = FrmVendas.LBXPedido.List(Item, 3) 'Tentativa conforme vc sugeriu
            
            End If
           
        Next
    
    If WM.Cells(WMLinha, 1).Value = Produto Then

        WM.Cells(WMLinha, 3).Value = ""
        Exit For
        Else
        WMLinha = WMLinha + 1

    End If

    Next A

    For Posição = FrmVendas.LBXPedido.ListCount - 1 To 0 Step -1

    If FrmVendas.LBXPedido.Selected(Posição) Then
        FrmVendas.LBXPedido.RemoveItem (FrmVendas.LBXPedido.ListIndex)
        Exit For
    End If

    Next Posição

    MsgBox "Item Cancelado", vbInformation, "Atenção"

    Else

    MsgBox "Senha Invalida", vbInformation, "Atenção"

    End If

    Unload Me
    'AtualizaFrmVendas

    End Sub
 
Postado : 30/05/2016 11:39 am
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Funcionou muito bem....

Obrigado.

 
Postado : 30/05/2016 12:13 pm