none
ComboBox Useform com items de outro Workbook RRS feed

  • Pergunta

  • Boa Tarde Pessoal!

    Eu estou a trabalhar numa worksheet de excel que vou aqui chamar sheetprev

    Eu coloquei uma combobox numa useform e agora queria ir buscar os dados que estão na sheet1 de outro workbook entre a celula A1 e A100.

    vamos supôr que este workbook onde quero ir buscar os dados chama-se prev2.xls e está no diretorio D:\Documentos

    Alguém me pode ajudar no código, ainda estou a iniciar no vba e não estou a conseguir

    terça-feira, 14 de maio de 2013 16:24

Respostas

  • Vamos resolver o problema por partes.

    "Neste momento, está a buscar-me os dados que eu quero mas só quando eu tenho o ficheiro Características dos transformadores.xls aberto... e eu queria que fosse buscar os dados sem abrir este excel."

    Para obter dados de uma pasta de trabalho fechada, você tem que seguir o caminho que propus. Caso contrário, terá que abrir a pasta de trabalho pelo Excel (como você está fazendo), obter os dados desejados e depois fechar a pasta de trabalho. Acho que você deveria seguir o caminho que estou propondo, é mais eficiente.

    Apenas mude o caminho descrito na constante 

    Const cstrBanco As String = "d:\documentos\prev2.xls"

    Além disso, mude o nome da planilha em que se encontram os dados (se necessário) na parte do código:

    strSQL = "SELECT * FROM [Sheet1$]"


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    segunda-feira, 20 de maio de 2013 21:52
    Moderador

Todas as Respostas

  • A melhor forma de você resolver seu problema é estabelecer uma conexão ADO com a pasta de trabalho que está fechada. Então, é feita uma instrução SQL para obter os dados da planilha e, assim, povoa a caixa de combinação desejada.

    Um comentário: sugiro que você coloque um cabeçalho na planilha em que estão os dados. E também, embora seja possível buscar apenas os 100 primeiros registros, meu exemplo irá buscar todos.

    Cole o código abaixo na classe de um formulário que contenha uma caixa de combinação chamada ComboBox1. Não se esqueça de adicionar uma referência à biblioteca Microsoft ActiveX Data Objects 2.6

    Private Sub UserForm_Initialize()
        Const cstrBanco As String = "d:\documentos\prev2.xls"
        
        Dim rst As ADODB.Recordset
        Dim cnn As ADODB.Connection
        Dim strSQL As String
        
        Set cnn = New ADODB.Connection
        If Val(Application.Version) < 12 Then 'Para Excel 97-2003
            cnn.ConnectionString = _
              "Provider=Microsoft.Jet.OLEDB.4.0;" & _
              "Data Source=" & cstrBanco & ";" & _
              "Extended Properties=Excel 8.0"
        Else 'Para Excel 2007 ou superior
            cnn.ConnectionString = _
              "Provider=Microsoft.ACE.OLEDB.12.0;" & _
              "Data Source=" & cstrBanco & ";" & _
              "Extended Properties=Excel 8.0"
        End If
        cnn.Open
        
        Set rst = New ADODB.Recordset
        
        strSQL = "SELECT * FROM [Sheet1$]"
        Set rst = cnn.Execute(strSQL)
        
        Do Until rst.EOF
            Me.ComboBox1.AddItem rst.Fields(0) & ""
            rst.MoveNext
        Loop
        
        rst.Close
        cnn.Close
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    terça-feira, 14 de maio de 2013 22:43
    Moderador
  • Obrigado pela ajuda mas não era bem por esse caminho que eu queria seguir, não entendi muito bem, sou mesmo iniciante.

    Tipo o que eu já consegui fazer foi isto:

    Private Sub ComboBoxPontodeEntrega_Change()
    
    Workbooks.Open Filename:="Y:\2.Características de equipamentos\Características dos transformadores.xls"
    Windows("Características dos transformadores.xls").Activate
    Sheets("Sheet1").Activate
    Me.ComboBoxPontodeEntrega.RowSource = "Sheet1!A3:A189"
    
    end sub

    Como eu disse eu estou a ir buscar dados a outra planilha de excel sem ser a que eu estou a trabalhar.

    Neste momento, está a buscar-me os dados que eu quero mas só quando eu tenho o ficheiro Características dos transformadores.xls aberto... e eu queria que fosse buscar os dados sem abrir este excel. Podias-me ajudar?

    Outra dúvida, como é que eu faço para não aparecer valores repetidos?

    Tenho ainda outra combobox2 que eu queria que apenas aparecesse os valores respetivos da ComboBoxPontodeEntrega, por exemplo:

    No ficheiro Características dos transformadores.xls tenho assim:

    Coluna A Coluna B

    SAM        TR1

    SAM        TR2

    SVI         TR3

    SVI         TR4

    SET         TR5

    SET          TR6

    ........

    Eu queria que quando selecionasse , por exemplo, o SET no ComboBoxPontodeEntrega, apenas aparecesse no combobox2, os respetivos TR5 e TR6 para poder escolher

    Obrigadão mais uma vez pela ajuda



    quarta-feira, 15 de maio de 2013 15:13
  • Vamos resolver o problema por partes.

    "Neste momento, está a buscar-me os dados que eu quero mas só quando eu tenho o ficheiro Características dos transformadores.xls aberto... e eu queria que fosse buscar os dados sem abrir este excel."

    Para obter dados de uma pasta de trabalho fechada, você tem que seguir o caminho que propus. Caso contrário, terá que abrir a pasta de trabalho pelo Excel (como você está fazendo), obter os dados desejados e depois fechar a pasta de trabalho. Acho que você deveria seguir o caminho que estou propondo, é mais eficiente.

    Apenas mude o caminho descrito na constante 

    Const cstrBanco As String = "d:\documentos\prev2.xls"

    Além disso, mude o nome da planilha em que se encontram os dados (se necessário) na parte do código:

    strSQL = "SELECT * FROM [Sheet1$]"


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    segunda-feira, 20 de maio de 2013 21:52
    Moderador