Boa tarde.
Respondendo à MP enviada pelo autor do tópico onde solicitou a identação do código existente na minha sugestão:
Dim matrizPrincipal() As Variant
Dim matrizGeral() As Variant
'As variáveis acima (declaradas fora dos procedimentos) são globais e permanecem ativas _
durante todo o processo.....
Private Sub txtdepartamento_AfterUpdate()
Dim matrizFiltrada() As Variant 'declara uma variável de matriz para receber os dados filtados
Dim tamanho As Long, linmatriz As Long 'variáveis de controle
Dim procurado As String 'variável de texto para receber o item procurado
Dim i As Long ' variável de Loop
tamanho = 0 'iniciando a variável em zero
linmatriz = 0 'iniciando a variável em zero
procurado = VBA.UCase(Me.txtdepartamento.Text) 'setando a variável no item procurado
Me.cboProduto.Value = "" 'limpando a combobox
If VBA.Len(VBA.Trim(procurado)) = 0 Then ' se a variável for vazia (para o caso de apagar o textbox) todos os itens são _
mostrados na combobox
Me.cboProduto.List = matrizGeral
Exit Sub
End If
For i = 1 To UBound(matrizPrincipal, 1) 'eu geralmente trabalho com 2 loops (um para definir o tamanho do array e outro para _
preecher o array
If VBA.UCase(matrizPrincipal(i, 1)) = procurado Then
tamanho = tamanho + 1
End If
Next i
If tamanho = 0 Then 'se o que for digitado não corresponder à nenhum dos departamentos, limpa a combo e deixa ela sem valores
Me.cboProduto.Clear
Exit Sub
End If
ReDim matrizFiltrada(1 To tamanho) ' mas se passar pelo passo acima (significa que encontrou pelo menos 01 departamento), então preenche a matriz....
For i = 1 To UBound(matrizPrincipal, 1) 'repetindo o Loop... mas agora preenchendo o array.....
If VBA.UCase(matrizPrincipal(i, 1)) = procurado Then ' se os itens baterem, incrementa a variável linha de matriz e coloca nela _
o item....
linmatriz = linmatriz + 1
matrizFiltrada(linmatriz) = matrizPrincipal(i, 2)
End If
Next i
Me.cboProduto.List = matrizFiltrada 'descarrega a matriz filtrada na propriedade "List" da combobox....
End Sub
Private Sub UserForm_Activate()
Dim ulinha As Long 'variável de controle da última linha
Dim i As Long
ulinha = WsBase.Cells(WsBase.Rows.Count, 2).End(3).Row 'calculando a variável....
If ulinha < 3 Then Exit Sub ' impondo condição para o menor valor admissível....
matrizPrincipal = WsBase.Range("b3:c" & ulinha).Value ' se passar pelo passo anterior... carrega a matriz....
ReDim matrizGeral(1 To UBound(matrizPrincipal)) ' redimensiona a matriz que receberá os itens....
For i = LBound(matrizPrincipal, 1) To UBound(matrizPrincipal, 1) ' carrega a matriz com os dados....
matrizGeral(i) = matrizPrincipal(i, 2)
Next i
Me.cboProduto.List = matrizGeral
End Sub
Resposta útil? Clique na mãozinha ao lado do botão Citar.
Postado : 15/03/2018 1:27 pm