Bom dia,
Estou estudando e treinando declarar os objetos e programar de modo geral sem usar termos por exemplo "Activecell" "Select" e outros que embora sejam mais fáceis de usar e programar no começo, podem complicar a vida quando se quer criar uma userform em que o workbook fica escondido e somente o userform fica aberto.
Bom este exemplo que estou fazendo é bem simples e é só para testar conceito mesmo. (Para os que tiverem estudando / com dúvida de como fazer as seguintes operações estou deixando o código explicadinho).
O que gostaria de fazer:
1) Determinar o tamanho da variável array - OK
2) Redimensionar a variável - OK
3) Popular (puxar as informações) a variável array - incompleto
4) Popular um listbox com multiplas colunas na userform1 com as informações da array. OK
Consegui concluir isto até o item 3, porém incompleto.
Para os itens 1 & 2 embora tenha conseguido fazer, ele não está funcionando da maneira que eu esperava. Por exemplo, eu fiz o código pensando que eu tinha declarado os objetos etc de modo que não importasse qual sheet estivesse ativa, ele funcionaria. Não é o caso, pois se eu tentar rodar com a Sheet2 ativa, o erro "Erro de definição de aplicativo ou de definição de objeto" aparece, justamente o que eu achei que estava evitando.
Para o item 3, como vi que a parte 1 & 2 não estava funcionando como eu decidi fazer esse post, porém do jeito que dexei percebi que na verdade do jeito que declarei a variável array, ele começa no (0,0) como faço para (é necessário/ boa prática?) que a variável comece na posição (1,1)?
Para o item 4, percebi que o preenchimento está sempre "Comendo" uma coluna pois o array começa no (0,0) então acho que devo realmente começando na posição (1,1). Por exemplo, se tiver dados, da coluna A até M na userform só aparece A até a L.
Obrigado pela atenção, e ajuda.
Segue o código e o arquivo.
Att,
Luis
Sub ArrayTeste()
'declarar as variáveis
Dim Mylist() As Variant
Dim nrow As Integer
Dim ncol As Integer
Dim i As Integer, j As Integer
Dim rng As Range
Dim ws As Worksheet
'para uma variável array que não se sabe o tamanho, primeiro temos que identificar numero de colunas & linhas (ncol & nrow)
Set ws = ThisWorkbook.Sheets(1) 'coloquei aqui, pois achava que eu teria que usar tipo "ws.rng.Column" mas não da certo.
With ThisWorkbook.Sheets(1)
Set rng = .Range("A1") 'Acho que é necessário uma referência para offset, deslocamento das células na montagem do array.
nrow = .Range(Cells(1048576, rng.Column).End(xlUp), Cells(rng.Row, 256).End(xlToLeft)).Rows.Count
ncol = .Range(Cells(1048576, rng.Column).End(xlUp), Cells(rng.Row, 256).End(xlToLeft)).Columns.Count
End With
'agora que se sabe o tamanho que terá seu array, redimenciona a variável.
ReDim Mylist(nrow, ncol)
'populando a variável array
For i = 1 To nrow
For j = 1 To ncol
Mylist(i, j) = rng.Offset(i - 1, j - 1) 'movendo pelas colunas
Next j 'trocando de linha
Next i
'popular a userform com as informações da variável array.
With UserForm1
.ListBox1.ColumnCount = ncol 'determinar o numero de colunas
.ListBox1.ColumnWidths = 75 'determinar largura das colunas
.ListBox1.List = Mylist 'popular as informações pra dentro da listbox
.Show 'mostrar a userform.
End With
End Sub
Postado : 29/01/2015 10:31 am