none
Dúvida para percorrer planilhas de uma pasta de diretório diferente RRS feed

  • Pergunta

  • Boa tarde.

    Necessito resolver o seguinte problema: Fazer uma macro para listar todas as pastas existentes em um diretório e para cada pasta da lista percorrer a 3ª coluna (C) da 1ª planilha (Plan1). Cada célula percorrida deve ser copiada para outra planilha de pasta e diretório diferente. A cópia só poderá ser realizada caso o conteúdo ainda não exista na planilha de destino. Caso já exista deve ignorar e passar para a próxima célula a ser copiada. O processo é repetido para todas as pastas da lista e todas as células copiadas são colocadas na mesma planilha e coluna destino. 

    Alguém pode me auxiliar na formulação do código da macro?

    terça-feira, 4 de junho de 2013 19:32

Respostas

  • Tente algo como:

        Dim wkb As Workbook
        Dim wks As Worksheet
        Dim lngRow As Long
        Dim lngLast As Long
        
        For Each fl In fld.Files
            Set wkb = Workbooks.Open(fl.Path)
            Set wks = wkb.Worksheets("Plan1")
            With wks
                'Suponha que queira percorrer a coluna C:
                lngLast = .Cells(.Rows.Count, "C").End(xlUp).Row
                'Suponha que dados começam da linha 10:
                For lngRow = 10 To lngLast
                    MsgBox "Conteúdo da célula: " & .Cells(lngRow, "C")
                Next lngRow
                wkb.Close SaveChanges:=False
            End With
        Next fl


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

    terça-feira, 4 de junho de 2013 23:24
    Moderador

Todas as Respostas

  • Olá, veja o link http://www.ambienteoffice.com.br/excel/gerar_planilha_com_arvore_de_arquivos_e_pastas/

    Possui código que resolve grande parte do seu trabalho. Tente utilizá-lo e responda aqui neste tópico se precisar de mais ajuda.


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

    terça-feira, 4 de junho de 2013 21:03
    Moderador
  • Olá Felipe! Me ajudou muito... Obrigada!!!

    Só estou com um problema ainda: 

     'Laço em cada arquivo do caminho desejado:
      For Each fl In fld.Files

    dentro desse For Each  para cada fl preciso entrar dentro da pasta e percorrer uma coluna. Não sei como fazer isso, ativar a planilha dessa pasta, para percorrer a coluna :-(

    terça-feira, 4 de junho de 2013 22:40
  • Tente algo como:

        Dim wkb As Workbook
        Dim wks As Worksheet
        Dim lngRow As Long
        Dim lngLast As Long
        
        For Each fl In fld.Files
            Set wkb = Workbooks.Open(fl.Path)
            Set wks = wkb.Worksheets("Plan1")
            With wks
                'Suponha que queira percorrer a coluna C:
                lngLast = .Cells(.Rows.Count, "C").End(xlUp).Row
                'Suponha que dados começam da linha 10:
                For lngRow = 10 To lngLast
                    MsgBox "Conteúdo da célula: " & .Cells(lngRow, "C")
                Next lngRow
                wkb.Close SaveChanges:=False
            End With
        Next fl


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

    terça-feira, 4 de junho de 2013 23:24
    Moderador
  • Felipe, muito obrigada!! Resolveu meu problema!!!

    Abusando um pouquinho do seu conhecimento, poderia me auxiliar em outra questão?

    Na minha planilha tenho linhas que são preenchidas até colunas diferentes, por exemplo a linha 4 vai até a coluna "D", a linha 5 vai até a coluna "K" etc. Necessito colocar um valor em algumas linhas (não são todas depende do valor da coluna "A"), mas deve ser colocado sempre na primeira coluna vazia que encontrar, ou seja, para cada linha pode ser a mesma coluna ou não.

    Estou utilizando o código abaixo:

    ultimaCol = .Cells(linha, Columns.Count).End(xlToLeft).Column

    .Cells(linha, ultimaCol) = aux_falta

    .Cells(linha, ultimaCol + 1) = aux_nota

    onde linha é a linha que satisfaz a condição para poder inserir o valor.

    Mas isso não está dando certo, para algumas linhas ele começa a inserir a partir da primeira coluna, para outras ele insere umas 4 colunas depois da última coluna preenchida... Está fazendo uma confusão só....

    Por favor, poderia me ajudar??

    Muito Obrigada!

    quinta-feira, 6 de junho de 2013 12:31
  • O seu código está correto. Teria alguma pasta de trabalho de exemplo em que isso acontece para disponbilizar e eu ter uma ideia melhor?

    Pode ser que o Excel esteja considerando como última coluna preenchida uma célula que resultou numa string vazia "" e foi colada como valor.


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

    quinta-feira, 6 de junho de 2013 23:04
    Moderador