Usuário com melhor resposta
ComboBox Useform com items de outro Workbook

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
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
- Sugerido como Resposta Felipe Costa GualbertoMVP, Moderator quarta-feira, 1 de janeiro de 2014 00:02
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator quarta-feira, 1 de janeiro de 2014 00:02
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
-
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
-
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
- Sugerido como Resposta Felipe Costa GualbertoMVP, Moderator quarta-feira, 1 de janeiro de 2014 00:02
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator quarta-feira, 1 de janeiro de 2014 00:02