Usuário com melhor resposta
VBA - ComboBox Ajuda!

Pergunta
-
http://social.msdn.microsoft.com/Forums/pt-BR/c5d5fc5f-6f3c-4951-afd3-143be3678ee5/inserir-informaes-em-combobox-ajuda?forum=vbapt&prof=required
Pessoal, tenho uma dúvida parecida com a do Link acima, tentei fazer as adequações para o meu caso, mas não estou conseguindo. No meu caso, conforme exemplo abaixo, tenho vários números repetidos e quero que o ComboBox me mostre os números disponíveis (uma vez de cada). Nesse exemplo tenho 108 números que se repetem de 001 à 005. Posso ter uma quantidade maior de números, assim como o intervalo pode ser maior.
Exemplo:
001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 002 003 003 003 003 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 004 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 005 Outra coisa, é que estou usando um Formulário, que carrega o arquivo na planilha "Dados" e posteriormente seria possível carregar os dados na combobox, ou seja, a hora que inicio o formulário os dados não estão disponíveis para carregar.
Código:
Private Sub UserForm_Initialize()
Dim myCollection As New Collection, Item As Variant
Dim lastRow As Long, i As Long
With Sheets("Dados")
lastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
For i = 1 To lastRow
On Error Resume Next
myCollection.Add .Range("B" & i).Value, CStr(.Range("B" & i).Value)
Next i
On Error GoTo 0
End With
For Each Item In myCollection
Me.00.AddItem Item
Next Item
End SubAcima é o código que eu tentei modificar para meu caso, mas não está dando certo.
- Editado Diego Sanca quinta-feira, 5 de junho de 2014 17:06
Respostas
-
Crie um formulário com uma caixa de combinação chamada ComboBox1 e insira o código a seguir:
Private Sub UserForm_Initialize() Dim clc As VBA.Collection Dim lngLast As Long Dim lngRow As Long Dim str As String Dim var As Variant Dim wks As Excel.Worksheet Set clc = New VBA.Collection Set wks = ThisWorkbook.Worksheets("Dados") With wks lngLast = .Cells(.Rows.Count, "A").End(xlUp).Row On Error Resume Next For lngRow = 2 To lngLast str = .Cells(lngRow, "A").Value2 clc.Add str, str Next lngRow On Error GoTo 0 End With For Each var In clc ComboBox1.AddItem var Next var End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator sábado, 20 de dezembro de 2014 11:30
Todas as Respostas
-
Crie um formulário com uma caixa de combinação chamada ComboBox1 e insira o código a seguir:
Private Sub UserForm_Initialize() Dim clc As VBA.Collection Dim lngLast As Long Dim lngRow As Long Dim str As String Dim var As Variant Dim wks As Excel.Worksheet Set clc = New VBA.Collection Set wks = ThisWorkbook.Worksheets("Dados") With wks lngLast = .Cells(.Rows.Count, "A").End(xlUp).Row On Error Resume Next For lngRow = 2 To lngLast str = .Cells(lngRow, "A").Value2 clc.Add str, str Next lngRow On Error GoTo 0 End With For Each var In clc ComboBox1.AddItem var Next var End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator sábado, 20 de dezembro de 2014 11:30
-
Oi Felipe,
Primeiramente, obrigado pela resposta. Funcionou.
Não sei se teria que abrir outro tópico, mas vou tentar aproveitar esse. Vou aproveitar da sua ajuda, aqui mesmo. (Desculpe se estiver errado)
Sobre o mesmo projeto VBA.
Tenho outro formulário dentro desse formulário que contém o Combobox (Tentei inserir a imagem[como anexo e como link] aqui, mas não consegui)
O botão "Info" me traz outro formulário pra editar. Queria saber se tem como depois que salvar e fechar o formulário "Info" voltar com esse formulário da imagem, na mesma situação que deixei (ComboBox na mesma posição, etc.)
Public Sub btInfo1_3_Click()
Unload cxEditar_TBC
cxInfo_Viagens1_3.Show False
End SubPublic Sub btSairInfo_Click()
Sheets("Dados").Range("S" & h + 1).Value = bxInfo1
Sheets("Dados").Range("T" & h + 1).Value = bxInfo2
Sheets("Dados").Range("U" & h + 1).Value = bxInfo3
Unload cxInfo_Viagens1_3
cxEditar_TBC.Show False
End SubEstou usando o código acima, mas ele simplesmente abre o formulário novamente. Gostaria que ele voltasse na mesma situação.
Desde já, obrigado pela ajuda.
-
Ao invés de usar o método Unload para fechar o formulário filho, use o método Hide. Dessa forma, ao usar o método Show dele novamente, verá que ele manteve o estado de todos os seus controles.
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator sábado, 20 de dezembro de 2014 11:30
- Não Marcado como Resposta Felipe Costa GualbertoMVP, Moderator sábado, 20 de dezembro de 2014 11:30