lunes, 6 de octubre de 2014

VBA: Cambiar nombres de ficheros con la instrucción NAME.

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'):

VBA: Cambiar nombres de ficheros con la instrucción NAME.


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:

VBA: Cambiar nombres de ficheros con la instrucción NAME.



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...

VBA: Cambiar nombres de ficheros con la instrucción NAME.


Los nombres de los ficheros han sido reemplazados por los nuevos.

8 comentarios:

  1. Muchas gracias, funciona muy bien y nos resuelve un problema importante.
    Saludos
    Miguel

    ResponderEliminar
  2. 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

    ResponderEliminar
    Respuestas
    1. Hola,
      habrí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

      Eliminar
  3. 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.
    Gracias

    ResponderEliminar
    Respuestas
    1. Hola Andreu,
      la 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

      Eliminar
  4. Respuestas
    1. Hola Angie,
      la macro la tienes especificada en el post...

      Saludos

      Eliminar