Criando pastas e subpastas com uma macro VBA

3

Estou procurando usar uma planilha que criei para gerar pastas e subpastas com base no que está em cada coluna.

A primeira coluna é o nível superior, a segunda coluna, o próximo nível abaixo (subpasta) e assim por diante.

    A                 B                   C                   D
1   TOP FOLDER 1      Sub Folder 1.1      Sub Folder 1.2      Sub Folder 1.3
2   TOP FOLDER 2      Sub Folder 2.1      Sub Folder 2.2      Sub Folder 2.3
3   TOP FOLDER 3      Sub Folder 3.1      Sub Folder 3.2      Sub Folder 3.3

Já experimentei outro programa e ele fez as pastas, mas as colocou em uma única pasta! Eu preciso disso com subpastas, mas acho que um problema pode estar separando as pastas, aqui está um exemplo:

Estou pensando que pode ser problemático separar as subpastas em suas pastas pai porque elas estão nas mesmas colunas ...

    
por user3471595 18.08.2014 / 21:51

2 respostas

5

Isso cria uma estrutura de pastas com o VBA. Curto e lindo.

Sub CreateFolderStructure()
    Dim objRow as Range, objCell as Range, strFolders as String

    For Each objRow In ActiveSheet.UsedRange.Rows
        strFolders = "C:\myRootFolder"            
        For Each objCell In objRow.Cells
            strFolders = strFolders & "\" & objCell
        Next            
        Shell ("cmd /c md " & Chr(34) & strFolders & Chr(34))
    Next    
End Sub

Sem tratamento de erros!

O que faz

  1. Fazer um loop em todas as linhas usadas da sua planilha ativa do Excel
  2. Defina a pasta raiz na qual nossas novas pastas devem ser criadas. Deve ser feito em todos os ciclos
  3. Faz um loop por todas as células usadas na linha atual
  4. Concatene a pasta raiz com uma barra invertida e a nova subpasta.
    Faça isso para cada subpasta nessa linha até obter algo como "C:\myRootFolder\TOP FOLDER 1\SUB FOLDER 1.1\SUB FOLDER 1.2\SUB FOLDER 1.3"
  5. Agora vem a mágica. Fazemos não usar a função mkdir do VBA.
    Em vez disso, usamos Shell(cmd /c md) que pode criar várias pastas com um único comando. Também não produz nenhum erro se uma pasta já existir. Um comando tão bonito

Algumas notas

  • Evite esses caracteres nos nomes das pastas: © ® " - & ' ^ ( ) @
  • As células vazias do Excel não são problema. O comando MD pode manipular strings como C:\root\subfolder com duas barras invertidas consecutivas
  • Os espaços nos nomes das pastas não são um problema, pois envolvemos a estrutura completa com duas aspas ( chr(34) )
por 19.08.2014 / 13:48
0
Sub MkDirs()

    Const RootPath = "C:\your\path"
    Dim rng As Range

    Set rng = Selection

    For Each rw In rng.Rows
        ChDir RootPath
        For Each cl In rw.Cells
            If cl <> "" Then
                MkDir cl
                ChDir cl
            End If
        Next
    Next 
End Sub
    
por 19.08.2014 / 14:03