Creare macro per rinominare file
Hai un problema con Excel? 
Creare macro per rinominare file
di Elena (utente non iscritto) data: 22/08/2016 17:30:50
Ciao.... giuro che ho cercato, ma non ho trovato la macro esatta per il mio caso....
vi espongo il problema:
ho una cartella chiamata "tappo" contenente foto nominate tipo "45258 collezione pippo.jpg, 45260 collezione baubau.jpg" ecc....
ho un file xlsx con due colonne: colonna A 45258, 45260 eccc - colonna B 10125, 11301 ecc
praticamente la colonna A mi rappresenta il codice della foto senza il testo.. (codice vecchio)
la Colonna B mi rappresenta il nuovo codice che la foto dovrebbe prendere....
nell'elenco xlsx ci sono molti piü codici che foto nella cartella tappo...
la macro dovrebbe rinominarmi 45258 collezione pippo.jpg in 10125.jpg avendo l'xlsx solo 45258 e non tutto il testo...
spero di essere stata chiara.....
grazie
Elena
di patel data: 22/08/2016 17:46:35
allega un file di esempio con 10 righe e spiega meglio
di Elena (utente non iscritto) data: 22/08/2016 18:02:59
Ciao Patel,
come faccio ad allegare i file?
in ogni caso ho file xls con con colonna A codice vecchio (5 cifre) , colonna B codice nuovo (5 cifre).
i file jpg nella cartella perö sono nominati col codice vecchio (5 cifre) piu una breve descrizione testuale poi esensione jpg
spero di essere stata un po piu chiara...
grazie per l'aiuto!
di patel data: 22/08/2016 18:12:09
prova questa
Sub RenameFile()
TotalRow = Cells(Rows.Count, "A").End(xlUp).Row
cartella = "F:Download" ' <<< percorso completo da modificare e terminare con
For r = 1 To TotalRow
numero = Cells(r, 1)
nomefile = Dir(cartella & numero & "*")
If nomefile <> "" Then
MsgBox nomefile
End If
Name cartella & nomefile As cartella & Cells(r, 2) & ".jpg"
Next
MsgBox "Fatto"
End Sub |
di Elena (utente non iscritto) data: 22/08/2016 18:59:17
Grazzie mille!! Domani mattina provo e ti faccio sapere!!
di Elena (utente non iscritto) data: 23/08/2016 09:35:04
Ciao... ho provato ma mi da errore percorso...
premetto che ho cambiato il percorso puntando sulla mia cartella....
ti allego l'errore...
di patel data: 23/08/2016 09:55:49
ce l'ho anche scritto che il percorso deve terminare con
perché ci hai messo l'asterisco ?
di Elena (utente non iscritto) data: 23/08/2016 10:00:46
non ho messo asterisco... ho messo .....
di Elena (utente non iscritto) data: 23/08/2016 10:09:23
Cliccando su debug,
mi evidenzia questa riga..
Name cartella & nomefile As cartella & Cells(r, 2) & ".jpg"
di patel data: 23/08/2016 10:15:27
prova con un'altra cartella che non sia in temp
di Elena (utente non iscritto) data: 23/08/2016 10:22:04
ho provato con un'altra cartella sul desktop... ma stesso errore....
di Elena (utente non iscritto) data: 23/08/2016 13:06:16
....non abbandonarmi Patel.....
di Albatros54 data: 23/08/2016 14:23:20
Scusate l'intromissione
Stando ha quello che hai scritto, ho creato uno scenario seguendo i tuoi dati.
Icolla il codice postato in un modulo del foglio di excel e lo lanci.
NATURALMENTE devi settare il percorso del file dove ci sono i nomi dei file che vuoi modificare.
ciao
Sub RenameFile()
totalrow = Cells(Rows.Count, "A").End(xlUp).Row
cartella = "C:UsersUtenteDesktopalessandro appo" ' <<< percorso completo da modificare e terminare con
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(cartella)
For Each objfile In objFolder.Files
s = Replace(objfile, "", "")
cont = ""
For N = 1 To Len(s)
If Mid(s, N, 1) <= "9" And Mid(s, N, 1) >= "0" Then
cont = cont & Mid(s, N, 1)
cont = CDbl(cont)
End If
Next
MsgBox CDbl(cont)
For r = 1 To totalrow
numero = Cells(r, 1)
If cont = numero Then
MsgBox objfile
FILENUOVO = Replace(objfile, cont, Cells(r, 2))
Name objfile As FILENUOVO
MsgBox "Fatto"
End If
Next
Next
End Sub |
di Elena (utente non iscritto) data: 23/08/2016 14:42:53
intromissione scusata!!
ho provato... me ne ha cambiato uno....
perche non mi cambia tutto in massa??
di Elena (utente non iscritto) data: 23/08/2016 14:52:08
ho provato con la cartella completa con 1800 foto e ne ha cambiati solo una ventina...
non capisco....
di Albatros54 data: 23/08/2016 14:56:10
ma i riferimenti alla colonna A del fili ci sono tutti o manca qualche numero che lui non trova?
di Elena (utente non iscritto) data: 23/08/2016 14:57:36
potrebbe mancare... anzi sicuramente manca...
l'xls comprende molti piu codici che foto...
di Albatros54 data: 23/08/2016 15:17:27
:)))
di Elena (utente non iscritto) data: 23/08/2016 15:24:12
e come facciamo adesso??
di Elena (utente non iscritto) data: 23/08/2016 15:45:40
ah... e ci sono anche foto che non ci sono nell'xls...
di Albatros54 data: 23/08/2016 15:57:28
Quindi il codice funziona ^__^
di Elena (utente non iscritto) data: 23/08/2016 16:06:20
eh... no.....
me ne converte solo una piccolissima parte.....
di Albatros54 data: 23/08/2016 16:15:18
Se vogliamo risolvere devi allegare il file non dico reali ma in parte, perche cosi non caviamo un Buco dal Ragno!!!
ciao
di Elena (utente non iscritto) data: 23/08/2016 16:18:00
posso caricare il file completo xls ma la cartella fotografica è qualche giga....
comunque grazzie davvero per l'aiuto!!
di Elena (utente non iscritto) data: 23/08/2016 16:19:25
ma non era un ragno dal buco.....
di Raffaele_53 data: 23/08/2016 16:28:34
Ciao a tutti
Puoi allegare il file che stai usando?
Dimmi il percorso esatto della cartella dove ci sono le foto
di Albatros54 data: 23/08/2016 16:28:36
Dipende dai punti di vista......
di Elena (utente non iscritto) data: 23/08/2016 16:41:15
ciao!
il percorso è:
C:UsersElenaRDesktopProva
ti allego xls completo?? o ti basta quello allegato con un po di righe??
di Raffaele_53 data: 23/08/2016 16:57:18
Prima copia questo codice nel file (dato che hai solo la colonna A e B scritte).
Metti il file dove ci sono le foto
Avvia il codice.
Spostami il file completto
Edit Se non appare l'elenco dei file modifica il codice da Dir(Percorso & "*.Jpg") in Dir(Percorso & "*.*")EDIT
Sub aa()
Dim Percorso As String, Nome1 As String, Nome2 As String, NomeFile As String, Ur As Long, Rg As Long
Percorso = ThisWorkbook.Path & ""
Ur = Range("A" & Rows.Count).End(xlUp).Row
Rg = 1
NomeFile = Dir(Percorso & "*.Jpg")
Do While NomeFile <> ""
Cells(Rg, 5) = NomeFile
Rg = Rg + 1
NomeFile = Dir
Loop
MsgBox "fatto"
End Sub |
di Elena (utente non iscritto) data: 23/08/2016 17:20:50
...mi ha creato nella colonna E i nomi dei file contenuti nella cartella fotografica....
di Raffaele_53 data: 23/08/2016 17:28:24
Sto aspettando il file completto
Dentro non c'è la lista che Ti ho fatto fare.
Il file quando inserisci del codice va salvato come >>> nome.XLSM
Rifai il tutto
di Elena (utente non iscritto) data: 23/08/2016 17:36:05
Fatto...
Colonna A codice vecchio
Colonna B codice nuovo
la macro di Albatros funziona.... ma ha convertito solo una piccola parte....
di Elena (utente non iscritto) data: 23/08/2016 17:45:15
fatto
di Raffaele_53 data: 23/08/2016 17:53:18
Scusami
Hai allegato un file xlsx dove vedo solo due serie di numeri
Manca quello che Ti ho chiesto di fare (casomai rilegggi l'ultimo post).
Dal documento Word ho visto che in colonna B hai dei nomi finiti con estenzione .JPG
Pertanto mi aspetto in colonna A dei numeri
In colonna B tutti i nuovi nomi con .JPG finale
In colonna E il listato che Ti ho fatto fare.
Puoi allegare anche una foto qualsiasi?
di Elena (utente non iscritto) data: 23/08/2016 17:59:23
ho allegato l'xlsx con la colonna E (nomi file)
di patel data: 23/08/2016 18:19:03
mi sono accorto di un errore nella mia macro che diventa questa.
Se non rinomina tutti i file togli l'apice da
' Application.Wait (Now + TimeValue("0:00:01"))
Sub RenameFile()
TotalRow = Cells(Rows.Count, "A").End(xlUp).Row
cartella = "F:Download" ' <<< percorso completo da modificare e terminare con
For r = 1 To TotalRow
numero = Cells(r, 1).Text
nomefile = Dir(cartella & numero & "*")
If nomefile <> "" Then Name cartella & nomefile As cartella & Cells(r, 2) & ".jpg"
' Application.Wait (Now + TimeValue("0:00:01"))
Next
MsgBox "Fatto"
End Sub |
di Raffaele_53 data: 23/08/2016 18:37:47
Mi sà che il problema è molto più serio....
>>>la macro dovrebbe rinominarmi 45258 collezione pippo.jpg in 10125.jpg
Prendo altre foto perchè la Foto del Tuo esempio non esiste
In pratica col E riga12/16 ci sono quattro 45003.
45003 Collezione Vetro A copia.jpg
45003 Collezione Vetro B copia.jpg
45003 Collezione Vetro C copia.jpg
45003 Collezione Vetro D copia.jpg
Alla riga17 vorresti che si chiamasse 11017.JPG
Ma quale delle quattro devo rinominare?
Altro caso, col E riga204 = 57081-82-83 Teramente copia.jpg
riga159 = 57081 11159
riga160 = 57082 11160
riga161 = 57083 11161
Vorresti che la foto sopra diventasse tre foto uguali?
Naturalmente la foto 45000-01 Collezione Tiffany copia.jpg
Non verrà rinominata perche non esiste in colonna A
Puoi darci ulteriori informazioni
EDIT Ho fatto in questo modo EDIT
Inserisci l'allegato (Copia_Foto) nella cartella delle foto.
Nella stessa Directory crei una cartella col nome FOTO
Ps. Il codice non rinomina, le copia cambiando il nome.
Prova 4/5 volte per capire il tutto in una cartella a parte con qualche foto.
Appena aperto, premi il tasto "Elenco Foto"
A questo punto nella colonna B, se desideri inserisci il nuovo nome (senza .JPG fimale)
Quando hai fatto premi AVVIO.
NB Quando sarai sicura, "vai nel codice e togli l'apostrofo alla riga verde". Quella riga elimina i file dalla tua cartella (però sarà presente in FOTO).
di Elena (utente non iscritto) data: 24/08/2016 10:01:45
Raffaele!!! l'xlsm Funziona egregiamente!!!!!!
davvero un grazie di cuore a tutti per il vostro aiuto!!!!!!
di Elena (utente non iscritto) data: 25/08/2016 12:44:57
Ciao.... mi vergogno un po a chiedervi un altro favore.....
sarebbe possibile creare un xlsm (tipo quello di Raffaele) che inserito in una cartella generale di foto, dato un elenco di codici nella colonna A
crei una cartella (oppure creo in precedenza io) con solo le foto relative hai codici riportati??
e se non trova la foto magari dirmi foto non trovata......
se mi mandate a quel paese vi capisco....
di Raffaele_53 data: 25/08/2016 20:09:13
Non ho capito bene
Ok per la cartella, ma per i codici cosa intendi?
Metti alcuni codice nel foglio (ex 45039, numero composto da solo 5 caratteri) e se il VBA trova una foto che inizia col Tuo codice, l'ho sposta nella cartella? (non deve rinominare?)
Ex 45039-38 Chiaro-Scuro 1 copia.jpg sarà spostato in una cartella diversa?
di Elena (utente non iscritto) data: 26/08/2016 09:32:02
esatto!
praticamente adeso tutte le foto sono nominate tipo 11125.jpg oppure 10125 A.jpg 10125 B.jpg
non deve rinominare ....
l'elenco che userei per creare la cartella con le foto, corrisponde con il nome della foto (a parte quelle doppie con A B C ecc..)
quindi il VBA prenderebbe i primi 5 caratteri... sarebbe perfetto....
grazie!!!
di Raffaele_53 data: 26/08/2016 13:34:35
Allegato Rinomina_Sposta_Foto.xlsm
Leggermente diverso
Foglio Rinomina, legge le foto presenti (se scritto in colonna B le rinomina)
Lasciandole nella stessa Directory
Foglio Copia
In B1 = nome cartella
In colonna A inserisci i codici
Le foto che iniziano con i (5 caratteri) vengono spostate
di Elena (utente non iscritto) data: 26/08/2016 14:42:18
Grazie davvero tantissimissimo!!!!!
ultimo favore.... sarebbe possibile creare una copia delle foto invece di trasferirle nella cartella "mare"??
poi giuro che fino a lunedi non mi senti piu... (scherzo) dovrebbe essere tutto....
ho scoperto da poco cosa si puo fare con VBA... ma come si fa ad impare??????????
di Raffaele_53 data: 26/08/2016 20:54:39
>>>ma come si fa ad impare?
impare???
Dai (libri/forum), primo insegnamento, in questo caso:
FileSystemObj.MoveFile Percorso1 & Nome2, Percorso2 & Nome2
in
FileCopy Percorso1 & Nome2, Percorso1 & Percorso2 & Nome2
La riga è facoltativa in base al risultato >>>Sheets("Copia").Rows(x & ":" & x).Delete
di Vecchio Frac data: 27/08/2016 08:54:59
cit. Elena "ma come si fa ad impa(ra)re?"
---> Come in tutte le cose, leggendo la guida incorporata, consultando dei buoni libri, oggi (da parecchi anni in verità) c'è la sterminata possibilità di appoggiarsi a forum e blog specializzati. Soprattutto però con la pratica e il tentativo. VBA non è un linguaggio ostico o inaccessibile, però c'è uno sforzo iniziale da considerare, per acquisire dimestichezza con la terminologia e capire come devi far ragionare un compilatore che di suo è "stupido", cioè non ha iniziativa e non impara dai propri errori. Soprattutto ci vuole pazienza (con se stessi e con il linguaggio scelto).
di Elena (utente non iscritto) data: 30/08/2016 15:37:38
Rieccomi!!!
Raffaele!!!! non so se volevoi mettermi alla prova,....
FileCopy Percorso1 & Nome2, Percorso1 & Percorso2 & Nome2 ==> errato
FileCopy Percorso1 & Nome2, Percorso2 & Nome2 ==> corretto
adesso funziona facendo una copia!!!!
@ Vecchio Frac
la voglia di imparare c'è.... purtroppo è il tempo che manca.....
prometo che cerchero di applicarmi
comunque ringrazio ancora per l'aiuto che mi avete dato!!!
ci risentiamo piu avanti per un nuovo progeto che ho in mente!!
buona giornata!!!
Vuoi Approfondire?