• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

aguia

Cabeçalho da Listbox via Array

6 mensagens neste tópico

Bom dia!

Olá a todos, antes de mais queria saudar todo o pessoal do fórum.

Sou novo por aqui... e no VBA. Vou tentar aprender e ajudar com o pouco que sei...

É possível fazer com que os primeiros itens de uma matriz sejam o cabeçalho de uma Listbox?

Exemplo:

Eu tenho uma matriz  Myarray(9,5)

Gostaria que os todos os dados da linha 0 fossem o cabeçalho das várias colunas da listbox, mas via array não estou a conseguir, somente via rowsourse, definindo a parte da folha que contem os dados.

Grato.

Águia

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boa tarde.

É em excel.

O código do procedimento que pretendo que faça isso é o que está abaixo.

Sub existenciasPU()
   Dim GDH As Variant, GDHsaida As Variant
   Dim existe As Integer, i As Integer
   Dim PU As Currency

   Worksheets("Folha3").Select 'seleccionar a folha3 para apagar os valores existentes antes de lá pôr outros
   Range("A2:C65000").Clear 'Esta Folha3 serve para ver que valores estão a ir para o array
   Range("D2:F65000").Clear

   Worksheets("Folha2").Activate 'selecciona a folha com interesse para estas acções

   lastRow = Cells(Rows.Count, 2).End(xlUp).Row ' Verifica qual a ultima linha preenchida na coluna B

   contador = 0
   For Each GDH In Range("B" & lastRow & ":B2") ' está a começar do fim para ver se ficam logo ordenados no array pelos mais antigos
       'MsgBox "GDH existPU = " & GDH
       If GDH.Offset(0, 1) <> "" Then
           existe = GDH.Offset(0, 3)
           PU = GDH.Offset(0, 2)
           'MsgBox GDH.Offset(0, 1) <> ""
       ElseIf GDH <> "" And GDH.Offset(0, 1) = "" Then
           existe = GDH.Offset(0, 3)
           PU = GDH.Offset(0, 2)
       End If

       a = existe 'quantidade existente para determinado preço
       b = PU 'preço unitário para esta quantidade
       'c = GDH 'GDH da entrada do artigo
       e = ListBox1.Value 'Artigo analisado

       'MsgBox contador
       Dim existem(0 To 65000, 0 To 3) As Variant 'array para guardar os valores achados
           existem(contador, 0) = e 'Artigo analisado
           existem(contador, 1) = a 'quantidade existente para determinado preço
           existem(contador, 2) = b 'Preço de custo
           'existem(contador, 3) = c 'GDH da entrada do artigo

           Sheets("Folha3").Cells(contador + 1, 1) = existem(contador, 0) 'coloquei os valores nesta folha para ver que valores ali chegavam
           Sheets("Folha3").Cells(contador + 1, 2) = existem(contador, 1)
           Sheets("Folha3").Cells(contador + 1, 3) = existem(contador, 2)
           'Sheets("Folha3").Cells(contador + 1, 4) = existem(contador, 3)
           'Sheets("Folha3").Cells(contador + 1, 4).NumberFormat = "ddmmmyy hh:mm:ss;@"
           contador = contador + 1
   Next GDH

   'preencher o listbox

   For i = 1 To 1 'contador

       ListBox2.Clear 'apaga o que a ListBox contiver
       ListBox2.ColumnCount = 3 ' n.º de colunas que a listagem vai possuir
       ListBox2.ColumnWidths = 90 & ";" & 50 & ";" & 60
       ListBox2.ColumnHeads = True 'acrescenta a linha para os cabeçalhos na ListBox
                                   'Para fazer aparecer os títulos na ListBox devemos seleccionar a ListBox & _
                                   'e em ColumnHeads, nas propriedades, meter True.

       ListBox2.List = existem() 'a listbox carrega os valores do array

       'ListBox2.AddItem , 0 'adiciona a linha de cabeçalho

       'ListBox2.List(0, 0) = "Artigo" 'introduzindo o cabeçalho desta forma coloquei a propriedade ColumnHeads=False
       'ListBox2.List(0, 1) = "Existências"
       'ListBox2.List(0, 2) = "PU em €"

       'selecciona o primeiro item da lista
       ListBox2.ListIndex = 0

   Next i

   'Apagar a Folha2 que já não é mais necessária
   Application.DisplayAlerts = False
   'Sheets("Folha2").Delete
   Application.DisplayAlerts = True

End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tente adaptar...

Sub PovoarLista()
Me.ListBox4.Clear
Dim Cont, UltimaLinha
UltimaLinha = Plan2.Range("A65000").End(xlUp).Row
For Cont = 1 To UltimaLinha
Me.ListBox4.AddItem Plan2.Range("A" & Cont)
Me.ListBox4.List(Me.ListBox4.ListCount - 1, 1) = Plan2.Range("B" & Cont)
Me.ListBox4.List(Me.ListBox4.ListCount - 1, 2) = Format(Plan2.Range("C" & Cont), "00")
Me.ListBox4.List(Me.ListBox4.ListCount - 1, 3) = Plan2.Range("D" & Cont)
Me.ListBox4.List(Me.ListBox4.ListCount - 1, 4) = Plan2.Range("E" & Cont)
Me.ListBox4.List(Me.ListBox4.ListCount - 1, 5) = Plan2.Range("F" & Cont)
Me.ListBox4.List(Me.ListBox4.ListCount - 1, 6) = Format(Plan2.Range("G" & Cont), "00")
Me.ListBox4.List(Me.ListBox4.ListCount - 1, 7) = Format(Plan2.Range("H" & Cont), "#,##0.00")
Next
End Sub

:eek:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá joseA,

                  estive a analisar o seu código, e se não estiver enganado ele recorre a uma folha de excel para carregar a listbox. Se assim for, não é isto que eu pretendo. Eu pretendo que através de um array se consiga carregar os cabeçalhos de uma listbox num formulário.

Se não fui suficientemente claro agradeço que me diga. Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
... estive a analisar o seu código, e se não estiver enganado ele recorre a uma folha de excel para carregar a listbox ...

Tens razão não havia compreendido sua solicitação, torço para que encontres a solução adequada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora