Ir ao conteúdo
  • Cadastre-se

Visual Basic Renomear Pastas em VBA


Posts recomendados

Boa tarde amigos, sou novo por aqui mas estudo VBA faz alguns anos. Estou com um problema que aparentemente parece simples de resolver, mas nunca consegui nada satisfatório

 

Estou com a seguinte situação, Imaginem a sequência de pastas

 

001 Arquivos Gerais

002 Arquivos Extras

003 Arquivos de Backup

004 Pendências

005 Provisório

 

Tenho uma pasta com 99 subpastas, renomeadas sempre neste padrão, de 001 a 099. O que preciso fazer?

 

Se por exemplo a pasta 003 for excluída, fique desta forma

 

001 Arquivos Gerais

002 Arquivos Extras

003 Pendências

004 Provisório

.

.

.

098 Pasta X

 

Como se de certo modo, a fila andasse, entendem? fora que podem haver mais pastas excluídas antes de eu rodar a macro, podendo uma pasta subir 2,, 3 ou mais posições

 

Muito obrigado desde já e conto com a ajuda de vcs!

Link para o comentário
Compartilhar em outros sites

Você pode adicionar um botão no excel para rodar um arquivo batch que faz o serviço conforme as instruções nesse link: (ele mostra como fazer no access mais no excel deve ser igual):

 

https://datatofish.com/vba-batch-file-ms-access/

 

No caso eu só tenho acesso ao office online lá não pode usar VBA mais mais o resultado poderia parecer com algo assim:

 

v5zWRGl.gif

 

 

 

 

Link para o comentário
Compartilhar em outros sites

@M.Correa  Veja se assim resolve.

 

Atribua o nome da pasta correta na constante Pasta (está como C:\Teste\).

 

Crie uma planilha em branco. A macro usa a primeira coluna para registrar os nomes das pastas e ordenar com CurrentRegion. Essa coluna será usada como referência para renomear as pastas quando necessário. Só usei essa coluna para ordenar porque não tenho certeza se no loop (For Each) os nomes vem sempre em ordem alfabética.

 

Const Pasta As String = "C:\Teste\"

Sub RenomearPastas()
    Dim SubPasta    As Object
    Dim Fso         As Object
    Dim Linha       As Integer
    Dim Num         As Integer
    Dim Renomear    As Boolean

    ThisWorkbook.ActiveSheet.[A:A].Clear
    
    Set Fso = CreateObject("Scripting.FilesystemObject")
    Linha = 1: Num = 1: Renomear = False
    
    For Each SubPasta In Fso.GetFolder(Pasta).SubFolders
        ThisWorkbook.ActiveSheet.Cells(Linha, 1) = SubPasta.Name
        Linha = Linha + 1
    Next SubPasta
    
    [A1].CurrentRegion.Sort ThisWorkbook.ActiveSheet.[A1], xlAscending
    
    While Num < Linha
        Dim nA  As String
        Dim nB  As String
        Dim P   As String
        
        P = ThisWorkbook.ActiveSheet.Cells(Num, 1)
        nA = Left(P, 3)
        nB = Format(Num, "000")
        If nA <> nB Then Renomear = True
        
        If Renomear = True Then
            Call Fso.MoveFolder(Pasta & P, Pasta & nB & Mid(P, 4, Len(P)))
        End If
        Num = Num + 1
    Wend
End Sub

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!