Criar pastas automaticamente com VBA

Solver e VBA no Excel 2010
Solver e VBA no Excel 2010
24 de abril de 2011
Copiar Planilha e Enviar como Anexo por Email com Outlook VBA
Copiar Planilha e Enviar como Anexo por Email com Outlook VBA
1 de maio de 2011

Objetivo: Realizar a criação de pastas automaticamente através do uso de VBA e Excel.

Este código é uma adaptação de outros artigos, para resolver o problema do leitor Orovaldo Colchon Filho que precisava criar 300 pastas para organizar os arquivos da empresa e estava buscando uma forma de automatizar esta tarefa.

Abaixo o código VBA para a geração das pastas:

Public Declare Function SHBrowseForFolder Lib "shell32.dll" Alias _
    "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Public Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias _
    "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) _
    As Long
Public Type BROWSEINFO
    hOwner As Long
    pidlRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type

Private Sub lsCriarPasta(ByVal lPasta As String)
    On Error Resume Next
    MkDir lPasta
End Sub

Public Sub lsCriarPastas()

    Dim iTotalLinhas    As Long
    Dim i               As Long

    iTotalLinhas = Worksheets("Menu").Cells(Worksheets("Menu").Rows.Count, 1).End(xlUp).Row
    i = 1
    While i <= iTotalLinhas
        lsCriarPasta Range("A" & i).Value
        i = i + 1
    Wend

    gfMens "Pastas Criadas!"
End Sub

Download “Criar pastas automaticamente” CriarPastas.zip – Baixado 69 vezes – 20 KB

Abraço

Marcos Rieper

14 Comentários

  1. Walter disse:

    Muito bom esse tema. Vai ajudar muitas pessoas…

    Mais uma vez parabéns Marcos!

  2. Djonas disse:

    Oba!
    Pra mim deu o erro “Sub ou Function não definida”, nessa linha: Public Sub lsCriarPastas()
    Se tiver como ajudar, agradeço.

  3. Bom dia Marcos.
    Estamos montando na empresa uma planilha para controle de ações corretivas e montando usando duas planilhas até o momento, a primeiro o local onde serão digitas das informações e a segundo o espelho do relatorio, que sera preenchido automaticamente quando se digita na primeira planilha. O que precisamos é que cada vez que gere um relatório ele seja salvo. Não sei se isso é possível.

    Obrigado e se quiser maiores informações é só pedir.

    Abraço.

  4. Carlos disse:

    Prezado Marcos,
    Ao tentar executar a macro “Criar pastas automaticamente com VBA” está ocorrendo o erro “Sub ou Function não definida”, na linha: Public Sub lsCriarPastas()…
    Poderia indicar-me a razão?
    Grato,
    Carlos

  5. Tulio disse:

    Caro Marcos,

    Percebi que esta macro roda apenas em computadores de 32b, sabe como fazer para adaptar para computadores de 64b?

    Muito Obrigado

    • Marcos Rieper disse:

      Bom dia Túlio,

      Você pode fazer isso colocando a cláusula PTRSAFE depois do declare dos trechos abaixo:

      Public Declare PTRSAFE Function SHBrowseForFolder Lib “shell32.dll” Alias _
      “SHBrowseForFolderA” (lpBrowseInfo As BROWSEINFO) As Long
      Public Declare PTRSAFE Function SHGetPathFromIDList Lib “shell32.dll” Alias _
      “SHGetPathFromIDListA” (ByVal pidl As Long, ByVal pszPath As String) _
      As Long

      Esta cláusula mantém a compatibilidade com o 32 bits para estas declarações.

      Abraço

      Marcos Rieper

  6. Montenegro disse:

    Valeu de mais da conta!
    Quebrou um galhão! Precisava criar 500 pastas para guardar documentos digitalizados de um condomínio.

    Muito bom!

  7. Prezado Marcos, sou iniciante no VBA, não consegui usar seu código devido ao meu PC ser versão 64 bits, como posso fazer para converter o código para uso em 64 bits ? desde já muito obrigado !

    • Marcos Rieper disse:

      Olá Paulo,

      Apenas inclua PtrSafe:

      Public Declare PtrSafe Function SHBrowseForFolder Lib “shell32.dll” Alias _
      “SHBrowseForFolderA” (lpBrowseInfo As BROWSEINFO) As Long
      Public Declare PtrSafe Function SHGetPathFromIDList Lib “shell32.dll” Alias _
      “SHGetPathFromIDListA” (ByVal pidl As Long, ByVal pszPath As String) _
      As Long

  8. Deu certo aqui obrigado Marcos, você é Fera !!!!

  9. Jose disse:

    Boa noite gostaria de saber um pouco mais sobre é código pois tenho que gerar um plan para cada dia do ano e e pegar o dados e inserir dentro da planilha para fazer conciliação bancária poderia me ajudar?

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Inscreva-se no nosso canal do Youtube!


Junte-se ao nosso canal do Youtube. Começamos em abril de 2016, mas já temos mais de 06:00 h de treinamentos gratuitos e este número irá aumentar. Vídeos novos todos os sábados.