Ir ao conteúdo
  • Cadastre-se

Excel VBA - Alterar nome de arquivos.


Posts recomendados

Gostaria de saber se é possível programar em VBA para alterar o nome de arquivos em uma pasta qualquer.

Por exemplo, retirar os traços "-" repetidos de todos os arquivos como mostra na foto.

No caso do arquivo "Aula 69 - ----- Geometria Espacial Métrica - Cilindros  Pate 1.avi", ficaria:

"Aula 69 - Geometria Espacial Métrica - Cilindros  Pate 1.avi".

asdf.png

Link para o comentário
Compartilhar em outros sites

Não sei como está procedendo, mas aqui funcionou perfeitamente.

Testei com três arquivos word:

Aula 69 - ----- Geometria Espacial Métrica - Cilindros  Pate 1.docx

Aula 69 - ----- Geometria Espacial Métrica - Cilindros  Pate 2.docx

Aula 69 - ----- Geometria Espacial Métrica - Cilindros  Pate 3.docx

A macro renomeia para:

Aula 69 - Geometria Espacial Métrica - Cilindros  Pate 1.docx

Aula 69 - Geometria Espacial Métrica - Cilindros  Pate 2.docx

Aula 69 - Geometria Espacial Métrica - Cilindros  Pate 3.docx

Link para o comentário
Compartilhar em outros sites

5 minutos atrás, Muca Costa disse:

Não sei como está procedendo, mas aqui funcionou perfeitamente.

Testei com três arquivos word:

Aula 69 - ----- Geometria Espacial Métrica - Cilindros  Pate 1.docx

Aula 69 - ----- Geometria Espacial Métrica - Cilindros  Pate 2.docx

Aula 69 - ----- Geometria Espacial Métrica - Cilindros  Pate 3.docx

A macro renomeia para:

Aula 69 - Geometria Espacial Métrica - Cilindros  Pate 1.docx

Aula 69 - Geometria Espacial Métrica - Cilindros  Pate 2.docx

Aula 69 - Geometria Espacial Métrica - Cilindros  Pate 3.docx

Deve ser porque no seu tem um espaço entre o último hífen e o restante do texto. Vou testar aqui colocando:

c1 = Cells(k, "B").Replace("-----", "", xlPart)

Deu certo!

Muito obrigado, @Muca Costa!

 

Agora vou analisar detalhes do seu código, sou iniciante em VBA.

Link para o comentário
Compartilhar em outros sites

6 minutos atrás, Muca Costa disse:

se tirar o espaço, vai ficar assim

Aula 69 -  Geometria Espacial Métrica - Cilindros  Pate 1.avi

ou seja, com dois espaços antes de Geometria

Deu certo aqui, troquei "----- " por "-----".

Ficou somente um espaço entre o último hífen e Geometria, no seu exemplo.

Link para o comentário
Compartilhar em outros sites

@Muca Costa  Eu que agradeço.

Esses hifens eu colocava quando terminava de ver um vídeo, mas agora quero "zerar" para revê-los.

Estou lendo o livro "Programando o Excel Vba Para Leigos - 2ª Ed 2013", simples mas está ajudando muito.

Você indica algum outro material/canal de vídeos?

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, Muca Costa disse:

Na realidade sou um autodidata, vou na coragem me aventurando em VBA(Access, word, Excel), Python, LibreOffice, ...
Minhas maiores fontes de pesquisas são participar de Fóruns(perguntando e/ou respondendo) e, principalmente, Internet...

Boa sorte.

Obrigado. Eu também sou autodidata, sou matemático mas gosto de programar nas horas vagas.

Se surgirem outras questões sobre VBA irei postar aqui, espero que veja sempre que possível.

Abraço!

Link para o comentário
Compartilhar em outros sites

@Muca Costa, Tenho  duas perguntas e gostaria que você me respondesse:

 

1) DÚVIDA
Na Sub Excluir(), na linha de renomear os arquivos, gostaria de entender para que serve esse c1 no começo, é uma variável qualquer? Ou um item de algum objeto?
c1 = Cells(repete, "B").Replace("iii", "kkk", xlPart)

 

2) DÚVIDA
Na Sub Renomear_Arquivos, na última linha,
Name NomeAntigo As NovoNome
de onde vem essa palavra name? Pertence a algum item da Sub ListarArquivos()? Explica essa parte se possível.

Link para o comentário
Compartilhar em outros sites

1) DÚVIDA
- Se tiver outros caracteres a excluir, ficaria c1, c2,.....
c1 = Cells(k, "B").Replace("----- ", "", xlPart)
c2 = Cells(k, "B").Replace("- ", "", xlPart)
............................................................

2) DÚVIDA
- Veja aqui: https://docs.microsoft.com/pt-br/office/vba/language/reference/user-interface-help/name-statement

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Muca Costa disse:

1) DÚVIDA
- Se tiver outros caracteres a excluir, ficaria c1, c2,.....
c1 = Cells(k, "B").Replace("----- ", "", xlPart)
c2 = Cells(k, "B").Replace("- ", "", xlPart)
............................................................

2) DÚVIDA
- Veja aqui: https://docs.microsoft.com/pt-br/office/vba/language/reference/user-interface-help/name-statement

Entendi.

1) PERGUNTA:

Então c1, c2, etc são parâmetros de quem? De objFile.Name lá da Sub Listar_arquivos()?

 

2) PERGUNTA:

Set objFSO = CreateObject("Scripting.FileSystemObject") serve para criar uma pasta temporária?

 

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Muca Costa disse:

1) PERGUNTA:
A Sub Excluir é uma macro independente, não tem nada com a Sub Listar_arquivos. É só pra auxiliar no resultado final...

2) PERGUNTA:
Dá uma pesquisada...

Obrigado. Cogitei a possibilidade do trecho da Sub Excluir ter relação com a Sub principal pelo fato da Excluir está sendo solicitada na principal...

Mas eu sei que cada Sub tem sua independência, a menos que variáveis sejam dimensionadas como Public ou no espaço de declarações (antes das Subs).

 

Testei a instrução Name especificando diretamente o CAMINHO + nome do arquivo atual As CAMINHO nome novo do arquivo novo. Então essa instrução independe do código anterior. Só com isso, já é possível renomear os arquivos.

Mas seu código é de grande ajuda porque faz isso dinamicamente.

 

Muito obrigado.

 

Link para o comentário
Compartilhar em outros sites

Como uma orientação ao colega @daviddatal, já que ele está em processo de aprendizagem de VBA, se fosse lhe dar um conselho diria que sua primeira fonte de pesquisa é o Help do VBA relativo ao próprio VBA ou às classes de objetos que você está manipulando, como o aplicativo Excel, por exemplo (bons tempos aqueles em que o help não era online, a pesquisa era muito mais simples e certeira).

Senão vejamos: em sua primeira pergunta anteriormente, 

4 horas atrás, daviddatal disse:

...para que serve esse c1 no começo, é uma variável qualquer? Ou um item de algum objeto?
c1 = Cells(repete, "B").Replace("iii", "kkk", xlPart)

 

Se você der uma olhada no help para o método Replace do objeto Range do Excel, lá mostra qual o retorno desse método:

 

Citação

Método Range.Replace (Excel)
...
Retorna um Boolean que indica caracteres em células dentro do intervalo especificado.

...

Valor de retorno
Booliano

 

Então a variável c1 usada pelo colega @Muca Costa conterá um valor True ou False, dependendo do retorno da operação de substituição. Na verdade nesse caso seria dispensável, pois você não utilizará esse retorno mais à frente em seu código. Então, lembrando de retirar os parênteses, poderia usar apenas:

 

Cells(repete, "B").Replace "iii", "kkk", xlPart

 

Lembrando que os Métodos em VBA executam alguma coisa e se assemelham a uma Sub, portanto nem sempre precisamos utilizar seu retorno, embora algumas vezes isso pode ser muito útil. Por exemplo, você pode simplesmente abrir um arquivo Excel usando o método Open dessa forma:

   Workbooks.Open "Teste.xlsx"

 

Por outro lado, você pode aproveitar que está abrindo e já colocar o Workbook que vai ser aberto numa variável de objeto pra ser usada mais à frente em seu código:

   Dim wb As Workbook  'ou As Object

   Set wb = Workbooks.Open("Teste.xlsx")

 

Atenção novamente ao uso dos parênteses quando você está fazendo atribuição.

_________________________

Quanto à pergunta:

 

3 horas atrás, daviddatal disse:

Set objFSO = CreateObject("Scripting.FileSystemObject") serve para criar uma pasta temporária?

 

A biblioteca Microsoft Scripting Runtime presente na dll scrrun.dll é que fornece a classe FileSystemObject, a qual é muito útil para manipular arquivos e pastas em unidades de disco. Portanto, ao criar uma instância dessa classe como na instrução acima, você está criando um objeto para manipular arquivos, seja para mover, renomear, criar, deletar, recuperar informações de tamanho, tipo, atributos e tudo o mais que refere-se a arquivos e pastas. Tenha em mente que isso está num objeto externo ao Excel e ao VBA, uma ferramenta à mais que está ali, disponível para uso para essa finalidade.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Obrigado também, @Edson Luiz Branco. Vou analisar suas contribuições.

Por hora, eu fiz uns pequenos ajustes no código, compartilho com vocês como ficou. Indiquei células para o usuário digitar o texto procurado e o texto substituto, entre alguns outros pequenos detalhes. Caso tenham sugestões ou melhorias, podem informar.

RenomearArquivos - Muca Costa - Fórum 2021.06.20.rar

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

8 horas atrás, Edson Luiz Branco disse:

Como uma orientação ao colega @daviddatal, já que ele está em processo de aprendizagem de VBA, se fosse lhe dar um conselho diria que sua primeira fonte de pesquisa é o Help do VBA relativo ao próprio VBA ou às classes de objetos que você está manipulando, como o aplicativo Excel, por exemplo (bons tempos aqueles em que o help não era online, a pesquisa era muito mais simples e certeira).

Senão vejamos: em sua primeira pergunta anteriormente, 

 

Se você der uma olhada no help para o método Replace do objeto Range do Excel, lá mostra qual o retorno desse método:

 

 

Então a variável c1 usada pelo colega @Muca Costa conterá um valor True ou False, dependendo do retorno da operação de substituição. Na verdade nesse caso seria dispensável, pois você não utilizará esse retorno mais à frente em seu código. Então, lembrando de retirar os parênteses, poderia usar apenas:

 



Cells(repete, "B").Replace "iii", "kkk", xlPart

 

Lembrando que os Métodos em VBA executam alguma coisa e se assemelham a uma Sub, portanto nem sempre precisamos utilizar seu retorno, embora algumas vezes isso pode ser muito útil. Por exemplo, você pode simplesmente abrir um arquivo Excel usando o método Open dessa forma:

   Workbooks.Open "Teste.xlsx"

 

Por outro lado, você pode aproveitar que está abrindo e já colocar o Workbook que vai ser aberto numa variável de objeto pra ser usada mais à frente em seu código:

   Dim wb As Workbook  'ou As Object

   Set wb = Workbooks.Open("Teste.xlsx")

 

Atenção novamente ao uso dos parênteses quando você está fazendo atribuição.

_________________________

Quanto à pergunta:

 

 

A biblioteca Microsoft Scripting Runtime presente na dll scrrun.dll é que fornece a classe FileSystemObject, a qual é muito útil para manipular arquivos e pastas em unidades de disco. Portanto, ao criar uma instância dessa classe como na instrução acima, você está criando um objeto para manipular arquivos, seja para mover, renomear, criar, deletar, recuperar informações de tamanho, tipo, atributos e tudo o mais que refere-se a arquivos e pastas. Tenha em mente que isso está num objeto externo ao Excel e ao VBA, uma ferramenta à mais que está ali, disponível para uso para essa finalidade.

 

Realmente o Help do VBA é de grande ajuda, estou sempre consultando ele.
Pena que não tem para baixar, se tivesse eu iria fazer um índice tópico por tópico para realizar consultas futuras.

 

Percebi que até o momento de capturar o caminho da pasta onde estão os arquivos, não precisa dessa biblioteca Microsoft Scripting Runtime. Fiquei pensando em outra maneira de manipular arquivos sem usar essa biblioteca, algo mais simples talvez. Pois basta colocar, por exemplo, Name CaminhoDoNomeAntigo As CaminhhoDoNomeNovo que o VBA renomeia. Agora preciso saber se existe também alguma instrução/palavra chave que consiga capturar o nome dos arquivos em uma pasta, sem recorrer à criação de objetos.

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!