none
VBA - ComboBox Ajuda! RRS feed

  • 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 Sub

    Acima é 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
    quinta-feira, 5 de junho de 2014 17:04

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

    sábado, 7 de junho de 2014 16:35
    Moderador

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

    sábado, 7 de junho de 2014 16:35
    Moderador
  • 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 Sub

    Public 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 Sub

    Estou 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.

    sábado, 7 de junho de 2014 22:48
  • 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

    sábado, 7 de junho de 2014 23:08
    Moderador