• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

jtiagodias

[Resolvido] Identificar pasta no computador e editar o nomes ficheiros

17 mensagens neste tópico

Viva.

Não sei se este é o local mais correcto para colocar esta questão, pelo que, se não for agradeço que me digam.

Apesar de já ter feito umas coisas em VB sou essencialmente um utilizador que faz macro de forma a cumprir objectivo especificos. Neste caso pretendo fazer macros fazer um pequeno ficeiro que facilite a gestão documental dos processos que tenho no emprego.

A situação é:

Hoje mesmo verifiquei uma coisa. No meu local de trabalho recebo, já em pdf, documentos para efectuar depachos. Acontece que a maior parte dos temas necessitam da criaão de uma pasta tipo "dossier". Ou seja, tenho que ir organizando o que sai, as respostas, etc...

Dessa forma, actualmente, tenho que colocar o PDF, dar-lhe o nome conforme um código que, para mim, identifica toda a informação necessária para o reconhecer e, depois, porque normalmente tenho que adicionar algumas observações, tenho que fazer uma tabela em excel em que, depois, terei que repetir esta informação, o que me parece rídiculo. Assim, gostaria de criar uma macro em quelia o nome do ficheiro e depois dividia o seu conteudo por células de forma a ir criando ma "base de dados" da documentação que está nas pastas... Outra hipótese seria o contrário, ou seja, eu ir preenchendo a base de dados e, através da macro, ela pegar no conteudo duma célula (que tenha a concatenação do código pretendido) e depois vá ao ficheiro (especificando o utilizador a pasta onde ele está), faça "mudar o nome", e cole o conteúdo do ficheiro. Assim, parecendo que não, o trabalho torna-se muito mais rápido e fica a pasta digital organizada tal como se fosse um dossier físico. Nest caso o que não sei é como ter o interface para o utilizador definir o local da pasta e, também, para o excel fazer a edição do nome do ficheiro.

Gostaria de ter um botão em que o utilizador definiria a pasta onde está o ficheiro (com um aspecto do género do explorador do windows) e depois então colocaria o código para ir mudar o nome do ficheiro.

Alguém me pode dar uma ajuda sobre os códigos a utilizar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá jtiagodias,

Podes dar um exemplo do nome e como iria ser dividido ?

Em resumo tu queres:

1 - Seleccionar o ficheiro

2 - Dividir o nome e colocar nas respectivas células

3 - Mover o ficheiro para a respectiva pasta (eu ainda não entendi qual ?)

Corrigi-me e complementa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Na minha concepção creio existirem várias vertentes para a execução deste ficheiro.

1 - O utilizador tem os ficheiros todos numa pasta e pretende apenas renomeá-los:

1.1 possui uma célula no excel com o novo nome que pretende dar ao ficheiro;

1.2 possui uma célula no excel com o nome do ficheiro;

1.3 A macro pergunta ao utilizador qual a pasta que contêm os ficheiros que pretende renomear e aparece a janela (tipo windows que aparece quando fazems um guardar como nos word ou no excel) para o utilizador procurar a pasta no seu pc;

1.4 Definida a pasta, a macro vai à celula de 1.1, procura (na pasta definida em 1.3) o ficheiro definido em 1.2 e faz os procedimentos necessários para alterar o nome do ficheiro (editar, mudar nome, colar o conteudo da célula e sair da edição do nome do ficheiro).

1.5 o trabalo da macro é concluído.

2 - O utilizador tem os ficheiros num local (p. ex. ambiente de trabalho) e pretende colocá-los numa nova pasta (a criar ou já criada) e depois renomeá-los:

2.1 A macro pergunta ao utilizador qual o ficheiro que pretende colocar na pasta e renomear.

2.2. a macro corta e cola o ficheiro;

2.3 e depois faz os passos do ponto 1

3 - O utilizador tem um ficheiro com um nome e pretende fazer a lista de controle dos documentos

Neste caso, basicamente as questões são as mesmas. A diferença é que quando a macro cola o nome do ficheiro vai fazê-lo apenas numa célula e eu depois tenho que o ir partindo por diversas células mas, devo dizer, esse já é trabalho que co maior ou menor dificuldade consigo fazer...

A minha questão é mesmo no código para o utilizador seleccionar o caminho, depois para renomear o ficheiro, etc etc etc. Basicamente o desconhecimento destes códigos intermédios é que não me permitem fazer o programa.

Espero ter sido esclarecedor desta vez Paulino.

Caso não tenha sido, peço que contactes novamente e desculpa por estar a ser tão complicada explicar. É complicado quando temos as ideias em presentes na nossa cabeça...

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, como deves calcular é uma questão "de peso" :) Mas vamos por partes

Ponto 1

1.1 Tens uma célula com o nome do ficheiro "exemplo meuficheiro" que representa "meuficheiro.pdf" ?

1.2 Tens outra célula com o nome que vai ficar certo ?

1.3 É isto:

    Dim folderName As String
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Show
        folderName = .SelectedItems(1)
    End With

1.4 Isto é um ciclo simples nas linhas do género:

 

   Dim x As Long
    Dim coluna As Integer
    Dim linha As Long
    
    coluna = 1
    linha = 1
    
    For x = linha To Cells(65536, coluna).End(XlDirection.xlUp).Row()
        ' renomeia
    Next

Não entendo o que queres dizer com "colar o conteudo da célula "

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mais ao fim do dia vou experimentar este código...

QUanto ao colocar o nome na célula, a ideia era: Uma vez que quero renomear o ficheiro, o excel ia à célula,copiava o texto e depois colava-o no nome do ficheiro. Penso que o teu código já faz isso... Vou testar e depois logo te digo algo.

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mais ao fim do dia vou experimentar este código...

QUanto ao colocar o nome na célula, a ideia era: Uma vez que quero renomear o ficheiro, o excel ia à célula,copiava o texto e depois colava-o no nome do ficheiro. Penso que o teu código já faz isso... Vou testar e depois logo te digo algo.

Abraço

Ok, fico a aguardar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, como deves calcular é uma questão "de peso" ;) Mas vamos por partes

Ponto 1

1.1 Tens uma célula com o nome do ficheiro "exemplo meuficheiro" que representa "meuficheiro.pdf" ?

1.2 Tens outra célula com o nome que vai ficar certo ?

1.3 É isto:

    Dim folderName As String
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Show
        folderName = .SelectedItems(1)
    End With

1.4 Isto é um ciclo simples nas linhas do género:

 

   Dim x As Long
    Dim coluna As Integer
    Dim linha As Long
    
    coluna = 1
    linha = 1
    
    For x = linha To Cells(65536, coluna).End(XlDirection.xlUp).Row()
        ' renomeia
    Next

Não entendo o que queres dizer com "colar o conteudo da célula "

Bom, Paulino.

Apesar de não o perceber, já tentei o teu código...

O primeiro pára no SelectedItems(1) e, pergunto, se antes não deveria fazer um range("a1").select. É que, mesmo assim, não funciona.

Quanto ao segundo não mexe. Pedia-te que me explicasses um bocadinho melhor o que é que ele faz para eu perceber se tenho que fazer mais código...

Entretanto é que me embrei do help do VBA. Hoje vou dar uma vista de olhos e entretanto logo post mais qualquer coisa...

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vou-te pedir (se possível) um exemplo. Se possível faz um upload em qualquer servidor e mostra o link para o ficheiro.

Mas vamos a explicaçõs:

O "SelectedItems(1) " devolve o nome do ficheiro seleccionado e, no exemplo, guarda numa variável. Depois podias fazer Range("A1").Value = folderName

O segundo código é um exemplo de um ciclo que percorre todos os item de uma lista.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora então aqui deixoo código que fiz para renomear um ficheiro.Sub RenomearFicheiro_Clique()

Dim OldName, NewName

Dim fileName As String

With Application.FileDialog(msoFileDialogFilePicker)

    .Show

    fileName = .SelectedItems(1)

    Range("A15").Value = fileName

End With

OldName = Range("a15").Value 'coloca o nome antigo na cálula A15

NewName = Range("a16").Value 'substitui o nome antigo pelo nome que está na célula pretendida

Name OldName As NewName    ' Rename file.

End Sub

Acontece que com este código obtenho o caminho do ficheiro e, para depois fazer a comparação (entre os ficheiros a renomear e a minha "base de dados"), necessito apenas do nome do ficheiro.

ALguém conhece alguma fórmula que permita partir o caminho pelas \ ou, o que é preferível, dar apenas o nome do ficheiro?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por exemplo:

OldName = Range("a25").Value 'coloca o nome antigo na cálula A15

Dim filePath As String, fileShortName As String
Dim x As Byte
Dim s() As String

' Separa o ficheiro pela barra
s = Split(OldName, "\")

' Guarda o nome da ultima posição do array (nome do ficheiro)
fileShortName = s(UBound(s))

' Faz um ciclo que vai construir o caminho do ficheiro
For x = LBound(s) To UBound(s) - 1
    filePath = filePath & s(x) & "\"
Next x

' Mostra a informação na janela Immediate
Debug.Print fileShortName
Debug.Print filePath

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva Paulino,

Tenho andado um pouco arredado destas bandas porque o tempo não dá para tudo. Contudo, a minha pequena aplicação não está parada. Tenho utilizado todas as tuas dicas e, ao que parece, está quase feita.

Bem quer dizer... O raciocinio está, depois falta ainda fazer todas as condições de interface com o utilizador e limpas os erros (por exemplo quando o utilizador não selecciona nenhuma ficheiro). Mas como isto já são condições de requinte, não esotu tão preocupado...

para já, apesar de o ter conseguido de forma indirecta, e porque não consegui nenhuma resposta na minha pesquisa, queria pedir-te uma ajuda para cortar parte do texto.

Passo a explicar:

' Separa o ficheiro pela barras

s= Split(OldName, "\")

assim fico com com o nome do ficheiro mas ele fica ainda com a extensão... E não queria. O nome do ficheiro que tenho é variável

pode ser:

1.7

112.8

12345.9

mas, com este código fica sempre .pdf.

Gostaria de saber se tenho algum código que separe (deste exemplo: 12456.9.pdf) apenas o texto: 12456.9.

Como disse indirectamente já consegui resolver a questão, mas é da forma amadora e, já agora, queria obter um ficheiro com bom aspecto...

Obrigado, mais uma vez.

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Podes fazer assim para remover a extensão:

s = "12456.9.pdf"

MsgBox Left(s, Len(s) - 4)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

jpaulino, mas existem extensões com mais de três letras (embora sejam mais raras).  :)

Function tira(s As String) As String
    Dim i As Integer
    i = Len(s)
    Do While Mid(s, i, 1) <> "."
        i = i - 1
    Loop
    tira = Left(s, i - 1)
End Function

Esta função retorna sempre o nome sem a extensão interpretada pelo Windows.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

jpaulino, mas existem extensões com mais de três letras (embora sejam mais raras).  :D

Sim, é verdade, mas no caso dele são pdf's e aí não muda. :biggrin:

Mas o código está bem visto e serve para outros casos.

Bom trabalho!  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, é verdade, mas no caso dele são pdf's e aí não muda. :biggrin:

Sorry, não tinha lido a thread toda.

Então ambas as soluções são válidas. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sorry, não tinha lido a thread toda.

Então ambas as soluções são válidas. :)

Sim, mas a tua dá para outros casos com extensões maiores. É sempre bom melhorar o código e torna-lo "á prova de bala".

Contribui sempre!

Um abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por falta de informação do utilizador e por existirem respostas aceitáveis à pergunta efectuada, esta questão foi marcada como resolvida.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora