La idea de hoy es cambiar el nombre de un fichero empleando una sencilla macro, basada en la instrucción poco conocida Name.
Deberemos saber que esta instrucción Name nos permite cambiar el nombre de un archivo y moverlo a un directorio o carpeta diferente (si así lo deseamos).
Tendremos cuidado, ya que Name puede mover un archivo a través de unidades pero sólo puede cambiar el nombre a un directorio o carpeta existente cuando tanto 'el nombre de la ruta antigua' como 'el nombre de la ruta nueva' están ubicados en la misma unidad.
Importante: Name no puede crear un nuevo archivo, directorio o carpeta!!!.
Por último, un par de limitaciones más...
si utilizamos la instrucción Name con un archivo abierto se producirá un error.
Los argumentos de la instrucción Name no pueden incluir caracteres comodín múltiples (*) ni sencillos (?).
La gran ventaja de esta instrucción es que con ésta podemos cambiar nombres de archivos sin abrirlos (como requeriría, por ejemplo, el método Workbook.SaveAs)
Conocidas entonces las ventajas e inconvenientes podemos trabajar con ella
La idea del ejercicio de hoy es renombrar los ficheros contenidos en una carpeta/directorio ('E:\excelforo\Cambios'):
Tenemos en la Hoja1 de nuestro fichero 'base' (un tercer fichero independiente), donde hemos incluido nuestra macro, la correspondencia entre los viejos y nuevos nombres:
Con esta hipótesis de trabajo, podemos disponer de nuestro procedimiento, dentro del proyecto de VBA de nuestro Libro de trabajo, dentro del Editor de VB, en un módulo, insertamos el siguiente código:
Tras ejecutarlo, conseguimos nuestro objetivo...
Los nombres de los ficheros han sido reemplazados por los nuevos.
Deberemos saber que esta instrucción Name nos permite cambiar el nombre de un archivo y moverlo a un directorio o carpeta diferente (si así lo deseamos).
Tendremos cuidado, ya que Name puede mover un archivo a través de unidades pero sólo puede cambiar el nombre a un directorio o carpeta existente cuando tanto 'el nombre de la ruta antigua' como 'el nombre de la ruta nueva' están ubicados en la misma unidad.
Importante: Name no puede crear un nuevo archivo, directorio o carpeta!!!.
Por último, un par de limitaciones más...
si utilizamos la instrucción Name con un archivo abierto se producirá un error.
Los argumentos de la instrucción Name no pueden incluir caracteres comodín múltiples (*) ni sencillos (?).
La gran ventaja de esta instrucción es que con ésta podemos cambiar nombres de archivos sin abrirlos (como requeriría, por ejemplo, el método Workbook.SaveAs)
Conocidas entonces las ventajas e inconvenientes podemos trabajar con ella
La idea del ejercicio de hoy es renombrar los ficheros contenidos en una carpeta/directorio ('E:\excelforo\Cambios'):
Tenemos en la Hoja1 de nuestro fichero 'base' (un tercer fichero independiente), donde hemos incluido nuestra macro, la correspondencia entre los viejos y nuevos nombres:
Con esta hipótesis de trabajo, podemos disponer de nuestro procedimiento, dentro del proyecto de VBA de nuestro Libro de trabajo, dentro del Editor de VB, en un módulo, insertamos el siguiente código:
Sub CambiarNombres() Dim NombreViejo As String Dim NombreNuevo As String 'recorremos las celdas A2:A5 con los viejos nombres For Each fichero In Range("A2:A5") 'asignamos valores a las variables, con el viejo y nuevo nombre NombreViejo = "E:\excelforo\Cambios\" & fichero.Value & ".xlsx" NombreNuevo = "E:\excelforo\Cambios\" & fichero.Offset(0, 1).Value & ".xlsx" 'con la instrucción Name procedemos al cambio de nombre de un archivo, directorio o carpeta. Name NombreViejo As NombreNuevo Next fichero End Sub
Tras ejecutarlo, conseguimos nuestro objetivo...
Los nombres de los ficheros han sido reemplazados por los nuevos.
Muchas gracias, funciona muy bien y nos resuelve un problema importante.
ResponderEliminarSaludos
Miguel
;-)
EliminarUn saludo
Hola muchas gracias, a ver si me puedes ayudar,tengo un problema, varios nombres nuevos que son iguales, necesito añadir una excepción cuando encuentre un nombre nuevo añada un 1, el siguiente un 2...gracias
ResponderEliminarHola,
Eliminarhabría que añadir un control que verifique si existe o no el nombre de la hoja previamente... en caso afirmativo añadir un autonumérico...
prueba con On Error GoTo o algún otro check...
Saludos
Saludos, si alguien me puede ayudar " Tenemos en la Hoja1 de nuestro fichero 'base' (un tercer fichero independiente), donde hemos incluido nuestra macro, la correspondencia entre los viejos y nuevos nombres:" no entiendo. Que ahy que poner y donde.
ResponderEliminarGracias
Hola Andreu,
Eliminarla lista de equivalencias entre los nombres viejos y los nuevos nombres de los ficheros debe estar en un fichero desde la cual ejecutaremos la macro descrita...
Desde aquí se gestiona el renombre de archivos.
Saludos
Puedes compartir la macro?
ResponderEliminarHola Angie,
Eliminarla macro la tienes especificada en el post...
Saludos
Como puedo hacer para que en una tercer columna me ponga un texto indicando que se cambiaron correctamente los archivos?
ResponderEliminarHola Aslan
Eliminarqué tal estás?, un placer saludarte igualmente.
Puedes añadir entre la fila 11 y 12 del código:
cells(fichero.row,"C").value="Cambiado"
Un cordial saludo
Hola, a mi me sale error 53 que hago ?
ResponderEliminarHola,
Eliminarasegúrate que la ruta termina en \, por ejemplo:
A:\excelforo\
y luego la celda con el nombre del fichero
Saludos
me pone un error dice: se ah producido el error 75¨ en tiempo de ejecución necesito ayuda esqe no se si lo este asiendo mal lo estoi asiendo en 4 columnas a,b,c y d tal como esta pagina dice pero no me deja me podrias ayudar
ResponderEliminarhttp://blogs.itpro.es/exceleinfo/2012/10/03/cambiar-nombre-de-archivos-desde-excel-con-macros/
Hola David,
Eliminarno tengo ninguna relación con esa página...
Sigue las indicaciones del post más arriba, está probado y garantizado.
Un saludo
Lo teneis actualizado para version Excel 2013 o superior?. Solo me funciona en versiones de 2007 o inferior. Gracias
ResponderEliminarHola, que tal estás?.
EliminarEl procedimiento funciona (probado) con Excel 2016..
No he probado con 2013, pero creo recordar que se publicó con Excel 2010...
Revisa que los nombres de los ficheros sean iguales a como se llaman en realidad.
Saludos
Gracias Ismael, pero yo lo uso en MAC y me da error de carga de Modulos...y nose solucionarlo...
EliminarHola,
Eliminarel problema es que el SO y por tanto algunos aspectos de la programación en VBA son distintas en MAC...
Deberías preguntar a algún experto en MAC, lo siento pero yo solo me muevo en entorno Windows.
Un saludo y suerte
buenas tardes alguien me puede ayudar con lo siguiente, y es que el cambio de ficheros funciona perfecto, pero si el archivo existe si no existe me genera un mensaje donde dice que archivo no existe, lo que trato de hacer es que si el archivo existe lo cambie si no no haga nada.
ResponderEliminarSub CambiarNombres()
Dim NombreViejo As String
Dim NombreViejo1 As String
Dim NombreNuevo As String
Dim NombreNuevo1 As String
Dim NombreRuta As String
ruta = "C:\Aloha\pedidos\"
nombre = Format(Now, "ddmmyyyy")
extencion = ".pdf"
NombreRuta = ruta & nombre & extencion
If My.Computer.FileSystem.File.Exists(NombreRuta) Then
For Each fichero In Range("A2:A2")
NombreViejo = "C:\Aloha\pedidos\" & fichero.Value & ".xlsx"
NombreViejo1 = "C:\Aloha\pedidos\" & fichero.Value & ".pdf"
NombreNuevo = "C:\Aloha\pedidos\" & fichero.Offset(0, 1).Value & ".xlsx"
NombreNuevo1 = "C:\Aloha\pedidos\" & fichero.Offset(0, 1).Value & ".pdf"
Name NombreViejo As NombreNuevo
Name NombreViejo1 As NombreNuevo1
Next fichero
Else
End If
End Sub
Hola,
Eliminardeberías incluir el condicional .File.Exists dentro del bucle For each, para evaluar si existe o no el fichero NombreViejo
Saludos
hola companero,
ResponderEliminarhice un poco de codigo en vba excel y los datos que recabo por medio de un formulario los voy poniendo en una plantilla/cuando mando a impresion a archivo quiero que el nombre de ese archivo sea lo contenido en una celda de esa plantilla pero no he podido, se agradece la ayuda que puedas prestarme
Hola Rafael,
Eliminardeberías crear una variable tipo String para componer el nombre del archivo; mejor que contenga la ruta completa:
nombre="E:\Excelforo\" & range("A11").value & ".xlsx"
Saludos
Siguiendo el codigo que hiciste, la macro se queda en el codigo Name NombreViejo As NombreNuevo; los ficheros estan bien, la srutas igual; etsoy usando excel 2010.
ResponderEliminarHola, cómo estás?
Eliminarun placer poder colaborar contigo
Revisa el código y las rutas (especialmente si has dispuesto correctamente los separadores \) y que los ficheros existen...
el código sigue funcionando correctamente
Un cordial saludo
Hola buen dia, ya tengo varios dias con este problema jeje he revisado varios foros y segun yo el codigo esta bien pero nadamas no logro sulucionar el problema :-(, Necesito renombrar archivos JPG de una carpeta en especifico pero al correr la macro siempre me manda el error FILE NOT FOUND ya revise y la ruta es correcta, el archivo esta ahi no se que pueda ser
ResponderEliminareste es el codigo:
Sub CambiarNombres()
Dim NombreViejo As String
Dim NombreNuevo As String
Dim Fe As Date
Dim Ho As String
For Each Fichero In Range("A2:A6")
Direccion = Range("H2").Value
Fe = Date
Ho = Format(Now, "HH:MM")
NombreViejo = "C:\Users\My Documents\Analisis\Ciclos\" & Fichero.Value & ".Jpg"
NombreNuevo = "C:\Users\My Documents\Analisis\Ciclos\" & Fichero.Value & "_" & Fe & "_" & Ho & ".Jpg"
'Aqui coloca la direccion completa para ver como quedaria cada archivo pero no logra encontrarlo :-(
Range("H15") = NombreViejo
Range("H16") = NombreNuevo
Name NombreViejo As NombreNuevo
Next Fichero
End Sub
De echo si ingreso la direccion completa "C:\Users\My..\archivo.jpg" que es igual a la que arroja la formula si funciona :-(, no se por que no toma la formula como un texto simple para tomarlo como direccion a buscar y cambiar
ResponderEliminarYa di con el error :-), Gracias !
ResponderEliminar;-)
Eliminar¿cuál fue el problema?
Hola buen dia, ahora es otro :-( al principio no encontraba el archivo, eso lo resolvi, funciono cuando puse el codigo, lo guarde y despues de eso realice un cambio de la hoja de calculo de carpeta para ya dejarla donde deveria estar y al correr la macro me mando este error: Run-time error '5': Invalid procedure call or argument, ya me busque y no logro encontrar la solucion para que este error ya no aparesca, tengo muchas macros y solo con este codigo sale ese error :-( help !!
EliminarUse el comando ActiveWorkbook.Path para que la dirección de donde están los archivos fuera mas corto y a partir de ahi trono todo, lo regrese al formato de dirección larga "C:\Micarpeta\Archivos etc . . ." pero ni asi se quita el error :-(
EliminarSub CambiarN()
EliminarDim NombreViejo As String
Dim NombreNuevo As String
For Each Fichero In Range("H2:H7")
NombreViejo = "C:\Users\VazquezA\Documents\My Documents\Analisis Realizados\Ciclos\" & Fichero.Value & ".jpg"
NombreNuevo = "C:\Users\VazquezA\Documents\My Documents\Analisis Realizados\Ciclos\" & Fichero.Offset(0, 1).Value & ".jpg"
Name NombreViejo As NombreNuevo
Next Fichero
End Sub
¿qué nombres son los que aparecen en las celdas?
Eliminar¿quizá tengan algún caracter no válido??
¿has probado con una ruta diferente que no esté en el escritorio?
Hola buen dia, cambie la dirección a un directorio mas directo como es C:\Temp para que sea mas coro y modifique lo que quiero como nombre, pero lo que me da el error es usar datos de hora al cambiar el nombre del archivo (IF(H2="","",H2&"-Rep-"&TEXT(TODAY(),"dd-mmm")&"-"&TEXT(NOW(),"HH:MM")), esa variable no la acepta, ya revise y realice pruebas, funciona siempre y cuando no use dentro de la formula que arroja el nombre la formula de TEXT(NOW(),"HH:MM"), no se por que si al final todo se covierte a texto y se guarda como un string, pero bueno ya modifique la formula y funciono, tambien arroja ese mismo error si el nombre del archivo no es valido algo asi como C:\Temp\MyArchivo.jpgxl
ResponderEliminarGracias por tu ayuda, Saludos !
Hay ciertos caracteres que no están admitidos en los nombres de los ficheros y/o rutas, por ejemplo, uno típico es la barra /
Eliminarotro son los dos puntos :
Saludos!
Copio el codigo tal cual y me da error en la linea de Name NombreViejo As NombreNuevo, por error 53 ¿?
ResponderEliminarHola
Eliminarel código estará bien, pero el error 53 te indica que no encuentra el archivo, asi que revisa la ruta y el nombre de los ficheros...
Saludos