TL;DR —
Name oldPath As newPathrenombra un archivo — pero sinewPathapunta a una carpeta distinta, VBA mueve el archivo allí. Una sola instrucción hace ambos trabajos. Y a diferencia deFileCopy,Namese niega a sobrescribir: si el destino ya existe lanzaerror 58en lugar de reemplazarlo.
Sub RenameAndMove()
Name "C:\Reports\draft.xlsx" As "C:\Reports\final.xlsx" ' misma carpeta -> un renombrado
Name "C:\Reports\final.xlsx" As "C:\Archive\final.xlsx" ' carpeta distinta -> un MOVIMIENTO
End Sub
Renombrar y mover parecen dos operaciones distintas, así que la mayoría de la gente va buscando dos comandos
distintos. VBA los pliega en una sola instrucción — Name — y la sorpresa no es que renombre, sino que la
misma instrucción mueve el archivo en silencio en cuanto la carpeta de destino difiere. Añade su terco
rechazo a sobrescribir, y Name se comporta a diferencia de cualquier otra herramienta de disco en VBA.
Aprende esos dos rasgos y se vuelve predecible.
Lo que aprenderás
- El modelo mental —
Namees renombrar y mover en una sola instrucción - Por qué
Namese niega a sobrescribir conerror 58— lo contrario deFileCopy - Por qué
Nameno puede cruzar unidades, y cómoFileCopy+KilloMoveFilehace ese trabajo - Los otros errores — origen que falta (
53), archivo abierto (70) — y cómo protegerte de ellos - La trampa de sintaxis
Name old As new, y por qué se lee raro junto a la propiedad.Name - Cuándo preferir
FileSystemObject.MoveFile, y el patrón de renombrado seguro para macros desatendidas
El modelo mental: renombrar y mover son la misma instrucción
La idea clave es que a Name no le importa el concepto de renombrar frente a mover — solo le importan la
ruta antigua y la ruta nueva. Elimina la entrada de directorio en la ruta antigua y crea una en la ruta
nueva. Si la parte de la carpeta es la misma, eso se te lee como un renombrado. Si la parte de la carpeta
difiere, el archivo acaba en otro sitio — un movimiento:
Name "C:\In\a.xlsx" As "C:\In\b.xlsx"— misma carpeta, nombre nuevo → renombradoName "C:\In\a.xlsx" As "C:\Out\a.xlsx"— carpeta nueva, mismo nombre → movimientoName "C:\In\a.xlsx" As "C:\Out\b.xlsx"— carpeta nueva y nombre nuevo → movimiento y renombrado a la vez
No hay una instrucción «mover» separada en el VBA built-in — Name es el movimiento. Una vez que lo ves como
«cambiar la ruta», cada comportamiento de abajo se deduce.
Name se niega a sobrescribir — lo contrario de FileCopy
Aquí es donde Name se separa del resto del kit de herramientas del disco. Si ya existe un archivo en la ruta
nueva, Name no lo reemplazará — se detiene con un error:
Name "C:\Reports\draft.xlsx" As "C:\Reports\final.xlsx" ' error 58 - "File already exists"
Compara los tres built-ins y sus respuestas contradictorias a «¿qué pasa si el destino existe?»:
Kill— borra sin ningún aviso (el destino es el objetivo).FileCopy— sobrescribe el destino en silencio.Name— se niega y lanzaerror 58.
Esto es una característica de seguridad: Name nunca aplastará un archivo existente por accidente. Pero también
significa que una macro desatendida se detiene en el instante en que el nombre de destino ya está ocupado.
Si tu intención es reemplazar el destino, bórralo primero — y protege eso con una comprobación de existencia:
If Dir("C:\Reports\final.xlsx") <> "" Then Kill "C:\Reports\final.xlsx" ' limpia el destino
Name "C:\Reports\draft.xlsx" As "C:\Reports\final.xlsx" ' ahora tiene exito
Ese test de existencia es de nuevo el one-liner de
comprobar-si-un-archivo-existe; aquí es lo que evita que un renombrado
programado se detenga en error 58.
Name no puede cruzar unidades — usa FileCopy + Kill o MoveFile
Name mueve archivos dentro de una unidad reescribiendo una entrada de directorio, lo cual es rápido y
barato. No puede mover un archivo a una unidad distinta, porque eso requiere copiar físicamente los bytes:
Name "C:\Reports\March.xlsx" As "D:\Archive\March.xlsx" ' error 74 - "Can't rename with different drive"
Un movimiento entre unidades es una copia más un borrado — exactamente la identidad de la guía de copiar archivos:
FileCopy "C:\Reports\March.xlsx", "D:\Archive\March.xlsx" ' copia los bytes a la otra unidad
Kill "C:\Reports\March.xlsx" ' luego elimina el original
Haz el Kill solo después de confirmar que la copia aterrizó — ese borrado es
permanente. O deja que el FileSystemObject haga
ambos en una sola llamada con MoveFile, que maneja los movimientos entre unidades internamente (se trata más
abajo).
Los otros errores: origen que falta y archivos abiertos
Dos errores más en tiempo de ejecución redondean Name, y ambos tienen los mismos arreglos que el resto de las
instrucciones de archivo:
Name "C:\Reports\missing.xlsx" As "C:\Reports\x.xlsx" ' error 53 - origen no encontrado
Name "C:\Reports\open.xlsx" As "C:\Reports\x.xlsx" ' error 70 - el archivo esta abierto/bloqueado
error 53— el origen no existe. Protégete conIf Dir(oldPath) <> "" Thenantes de renombrar.error 70— el archivo (o su destino) está abierto. No puedes renombrar un libro que está abierto en Excel;Closeprimero, luego renombra el archivo en disco.
Así que un renombrado robusto protege tres cosas: el origen existe, el destino no existe (o acaba de borrarse), y el archivo no está abierto. Eso es más cuidado del que un renombrado parece necesitar, pero es exactamente lo que evita que una macro desatendida se atasque en un error en tiempo de ejecución sin diálogo.
La trampa de sintaxis: Name old As new, no Name(old, new)
Name es una instrucción, no una función, y su sintaxis es inusual — las dos rutas se unen con la palabra
clave As, sin paréntesis y sin coma:
Name oldPath As newPath ' correcto - forma de instruccion con la palabra clave As
Name(oldPath, newPath) ' incorrecto - Name no funciona asi; error de compilacion/analisis
También se lee de forma confusa porque VBA ya usa .Name como una propiedad por todo el modelo de objetos
(ws.Name, wb.Name). El Name que renombra archivos es una instrucción de nivel superior, sin relación con
esas propiedades; ver Name x As y en su propia línea es la señal de que es la operación de archivo, no una
lectura de propiedad.
FileSystemObject.MoveFile y el patrón de renombrado seguro
La alternativa del modelo de objetos es MoveFile, y suele ser la mejor opción para los movimientos:
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject") ' enlace tardio - corre en cualquier maquina
fso.MoveFile "C:\Reports\March.xlsx", "D:\Archive\" ' maneja el cruce de unidades; \ final = dentro de la carpeta
MoveFile mueve entre unidades sin un copiar-y-luego-borrar manual, acepta comodines, y toma un destino de
estilo carpeta (\ final). Como Name, se niega a sobrescribir — así que el destino debe estar despejado
primero. Para un renombrado en el sitio puro, no hay ningún método FSO dedicado; Name sigue siendo la
herramienta más corta, o MoveFile con una ruta nueva completa en la misma carpeta.
Juntándolo todo, el renombrado seguro que no atascará una macro desatendida:
Dim src As String, dst As String
src = "C:\Reports\draft.xlsx": dst = "C:\Reports\final.xlsx"
If Dir(src) = "" Then Exit Sub ' nada que renombrar
If Dir(dst) <> "" Then Kill dst ' limpia el destino para que Name no choque con el error 58
Name src As dst ' renombrado o movimiento en la misma unidad
El veredicto honesto: Name para la misma unidad, copiar-más-borrar para entre unidades
Name es la respuesta de una línea para renombrar y para mover dentro de una unidad — siempre que respetes sus
dos rasgos definitorios. Cuatro reglas:
- Renombrado o movimiento en la misma unidad →
Name old As new— todo el trabajo en una sola instrucción. - Se niega a sobrescribir → despeja el destino primero (
Killtras una comprobación de existencia), o se detiene enerror 58. - Movimiento entre unidades →
Nameno puede; usaFileCopy+Kill, ofso.MoveFile. - Protege el origen, el destino y el estado de apertura → para que un renombrado programado nunca se atasque
en
error 53,58,70o74.
En el momento en que ves error 74, deja de intentar hacer que Name cruce la unidad — eso es Windows
diciéndote que un movimiento entre volúmenes es una copia, y la herramienta cambia en consecuencia.
Cómo ayuda ExcelMaster
Renombrar un archivo de forma segura significa acordarse de que Name también mueve, de que se niega a
sobrescribir, de que no puede cruzar unidades, y de que se atasca en un origen que falta o en un archivo
abierto — cuatro trampas separadas alrededor de una instrucción que parece que debería solo renombrar.
ExcelMaster escribe el renombrado que
no se atascará. Describe el trabajo — «renombra cada exportación con la fecha de hoy» o «mueve los archivos
terminados a la unidad de archivo histórico» — y produce la instrucción correcta: Name para un renombrado o
movimiento en la misma unidad con la protección de despejar el destino, un FileCopy-
más-Kill o fso.MoveFile cuando el destino está en otra unidad, y comprobaciones
de existencia para que error 58 o 74 nunca detengan una ejecución desatendida. Tú describes el resultado; él
elige entre renombrar, mover y copiar-más-borrar por ti.
Preguntas frecuentes
¿Cómo renombro un archivo en VBA?
Usa la instrucción Name con la palabra clave As: Name "C:\In\old.xlsx" As "C:\In\new.xlsx". Renombra el
archivo en su sitio cuando ambas rutas están en la misma carpeta. Protégelo primero — Name lanza error 53
si el origen falta y error 58 si ya existe un archivo con el nombre nuevo, así que comprueba que el origen
existe y despeja el destino (con Kill tras un test de existencia) antes de renombrar.
¿La instrucción Name de VBA mueve archivos también?
Sí. Name cambia la ruta del archivo, así que si la ruta nueva está en una carpeta distinta, VBA mueve
el archivo allí — Name "C:\In\a.xlsx" As "C:\Out\a.xlsx" mueve a.xlsx de In a Out. No hay ninguna
instrucción de movimiento separada en el VBA built-in; Name es el movimiento, siempre que ambas carpetas
estén en la misma unidad. Para un movimiento entre unidades, usa FileCopy más Kill, o fso.MoveFile.
¿Por qué VBA Name da error 58 File already exists?
Porque ya existe un archivo con el nombre nuevo, y Name se niega a sobrescribir — lo contrario de
FileCopy, que sobrescribe en silencio. Esto es una característica de seguridad, pero detiene una macro
desatendida. Para reemplazar el destino, bórralo primero: If Dir(newPath) <> "" Then Kill newPath, luego
Name oldPath As newPath. Confirma siempre que de verdad tienes la intención de descartar el archivo existente
antes de hacerle Kill.
¿Cómo muevo un archivo a otra unidad en VBA?
Name no puede cruzar unidades — Name "C:\a.xlsx" As "D:\a.xlsx" lanza error 74, «Can't rename with
different drive». Un movimiento entre unidades es una copia más un borrado: FileCopy "C:\a.xlsx", "D:\a.xlsx"
luego Kill "C:\a.xlsx" (solo después de confirmar que la copia tuvo éxito). Como alternativa, fso.MoveFile
del FileSystemObject realiza un movimiento entre unidades en una sola llamada.
¿Cuál es la diferencia entre la instrucción Name y la propiedad Name?
No tienen relación. La instrucción Name renombra o mueve un archivo en disco — Name oldPath As newPath,
una instrucción de nivel superior que usa la palabra clave As. La propiedad .Name lee o establece el
nombre de un objeto en el modelo de Excel, como ws.Name para una hoja o wb.Name para un libro. Ver
Name x As y en su propia línea es la operación de archivo; something.Name es la propiedad.
Probado en
Probado en: Excel 365 (Windows 11), VBA 7.1 — última verificación el 22/08/2026.
Guías relacionadas: VBA Copy File · VBA Delete File · VBA Check If File Exists · VBA Dir · VBA FileSystemObject
