Usuário com melhor resposta
Ajuda: Arquivo1.xls busca conteúdo de determinada célula no arquivo2.xls, usando o comando cells.find.

Pergunta
-
Boa tarde!
Primeiro vou descrever o que estou fazendo, para depois dizer o problema que estou tendo.
Estou criando uma rotina VBA que irá gerar um banco de dados basedo no conteúdo dos arquivos XLS's de uma determinada pasta. Como o formato padrão do arquivo XLS matriz mudou várias vezes durante os anos, eu estou tentando buscar as informações de acordo com a descrição do campo.
O problema que encontrei é o seguinte:
Meu arquivo que tem o código VBA, abre o XLS, mas quando tento executar o comando "FIND" ele da o seguinte erro:
Erro em tempo de execução '91': A variável do objeto ou a variavel do bloco 'with' não definida.
Confesso que tenho grandes problemas toda vez que tento usar o comando FIND, por isso evito ele ao máximo, mas dessa vez preciso dele.
O que eu estou achando, é que eu preciso definir que o comando cells.find a ser executado, tem que ser executado no arquivo que foi aberto.
Resumindo, meu problema é: Um arquivo XLS, buscar o conteúdo de uma célula que está em um segundo arquivo XLS através do comando cells.find (ou qualquer outro comando de busca que não precise de um for/while para ler a planilha inteira). Só para finalizar, terei que abrir e ler mais 4000 arquivos. Só tenho esse problema para finalizar minha macro, pois pegar a pasta e ler todos os arquivos e salvar no banco eu fiz. Só falta pegar as informações que realmente importantes.
Espero ter conseguido explicar meu problema.
Obrigado
Giovani Rodrigues
Respostas
-
Boa tarde!
Caros amigos, após pesquisa realizada neste site e no site da MS, achei uma solução:
Set vFind = xlw.ActiveSheet.Cells.Find(What:=sAux)
A partir deste ponto serei capaz de continuar em minha macro!
Muito obrigado a todos pela atenção! E por ventura, num futuro próximo, surgirem mais dúvidas, pode deixar que postarei neste forum novamente!
- Marcado como Resposta Giovani Rodrigues segunda-feira, 18 de outubro de 2010 17:47
Todas as Respostas
-
-
Bom dia! Desculpe a demora em responder.
O código que estpu criando, só será utilizado uma única vez (eu espero), pois quero gerar um banco de dados, para manter histórico. Eu já faço esse "histórico" manualmente, usando a busca do windows aliada com a busca manual de mais de 4 mil arquivos. Eu sei que está meio tosco, mas faz tempo que não programo!
Por favor, quem puder, me ajude!
A msg de erro é: "Erro em tempo de execução '91': A variável do objeto ou a variável do bloco 'with' não foi definida."
Abaixo segue o código:
Sub LeOS()
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim sSql As String
Dim sAux As String
Dim sValores As String
Dim i As Long
Dim l As Long
Dim xl As New Excel.Application
Dim xlw As Excel.Workbook
Dim fso As New FileSystemObject
Dim pasta As Folder
Dim file As fileDim vAux As Variant
sValores = ""
'Defini este vetor apenas com os campos que desejo pegar do arquivo
vAux = Split("os|data|codint|cc|nfent|itemnf|nfdev|nfsaida|datafat|solicitante|email|descrmaqeq|descricao|destino|desenho|detalhe|qtde|unidade|ps|prazoentrega|respromp|croqui1|croqui2|croqui3", "|")
Set pasta = fso.GetFolder("C:\TESTE")'Conexão com o banco
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\teste\teste.mdb"'Pega um a um os arquivos da pasta
For Each file In pasta.Files
If UCase(Right(file.Name, 3)) = "XLS" Then
Set xlw = xl.Workbooks.Open(file.Path)
'Percorre o vetor de campos para buscar apenas os valores desejados
For i = 0 To 23
'Trata o campo
sAux = PegaCampo(UCase(vAux(i)))
'Deveria fazer a busca de acordo com o valor da variável sAux. Mesmo se eu fizer sem a variável
'colocando apenas o valor string entre aspas, retorna o mesmo erro.
Cells.Find(What:=sAux, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
.Activate
'Monta uma string para ser tratada mais para frente no código
sValores = sValores & "|" & Cells(ActiveCell.Row + 1, ActiveCell.Column).Value
Next
'tratamento da informação para ser inserida em um banco de dados.
'ainda não inseri aqui, pois não tive tempo nesses últimos dias.
End If
Nextxlw.Close
Set xl = Nothing
cnn.CloseEnd Sub
-
No lugar da linha que esta dando erro tente isso...
xlw.ActiveSheet.Cells.Find(What:=sAux, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
.Activate
Rafael Gomes dos Santos Consultor de Informática MCAS - Microsoft Certified Application Specialist rafael.gomes.santos@gmail.com https://sites.google.com/site/pfntec/ -
Boa tarde Rafael.
Continua dando erro, mas a mensagem é outra:
"Erro em tempo de execução 1004: Não é possível obter a propriedade FIND da classe RANGE"
Hoje estou com tempo livre, vou pesquisar mais sobre o comando find. Quem sabe eu entendo ele melhor.
Muito obrigado pela sua resposta!
-
Boa tarde!
Caros amigos, após pesquisa realizada neste site e no site da MS, achei uma solução:
Set vFind = xlw.ActiveSheet.Cells.Find(What:=sAux)
A partir deste ponto serei capaz de continuar em minha macro!
Muito obrigado a todos pela atenção! E por ventura, num futuro próximo, surgirem mais dúvidas, pode deixar que postarei neste forum novamente!
- Marcado como Resposta Giovani Rodrigues segunda-feira, 18 de outubro de 2010 17:47