none
Ajuda: Arquivo1.xls busca conteúdo de determinada célula no arquivo2.xls, usando o comando cells.find. RRS feed

  • 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

    terça-feira, 5 de outubro de 2010 20:52

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!

    segunda-feira, 18 de outubro de 2010 17:47

Todas as Respostas

  • Giovani,

     

    O problema é que o Excel não está entendendo onde você quer executar este FIND.

    Copie aqui a linha que está dando erro

    sexta-feira, 8 de outubro de 2010 20:02
  • 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 file

    Dim 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
    Next

    xlw.Close
    Set xl = Nothing
    cnn.Close

    End Sub 

    quinta-feira, 14 de outubro de 2010 11:04
  • 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/
    quinta-feira, 14 de outubro de 2010 17:31
  • 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!

    segunda-feira, 18 de outubro de 2010 17:04
  • 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!

    segunda-feira, 18 de outubro de 2010 17:47