martes, 22 de septiembre de 2015

VBA: El método .MoveFolder o cómo cambiar Carpetas de ubicación.

Hace unas semanas un lector me planteaba la siguiente pregunta:
...necesito cambiar la ubicación de una carpeta en otra ubicación, pero reemplazando el nombre original por la fecha y hora del sistema.
Por ej si la carpeta se llama balance, se copia y se pega con el nombre 21-07-2015 16:15, y así todas las veces que pegue una nueva carpeta sin sobreescribirla ya que sera distintas por la fecha del sistema.


La idea, parece por tanto clara, ¿podemos desde Excel gestionar la creación y/o renombrar Carpetas de nuestros directorios?.
La respuesta, obviamente, es que sí.. empleando el Objeto "Scripting.FileSystemObject", y para este caso concreto, un método asociado: .MoveFolder.
Es importante mencionar, de hecho existen algunos controles en la propia macro, que el nuevo nombre de la carpeta NO puede existir!!.

Con esta premisa, ya estamos en disposición de incorporar el código necesario...
Si vemos nuestro explorador de Windows, observamos la carpeta que deseamos cambiar:
E:\excelforo\00CarpetaVieja

VBA: El método .MoveFolder o cómo cambiar Carpetas de ubicación.



Insertamos nuestro código en un módulo estándar de nuestro proyecto de VBA desde el editor de VB:

Sub Reubicar_Carpeta()
'Para MOVER una carpeta de una Ubicación a otra...

Dim RutaCarpetaVieja As String, RutaCarpetaNueva As String
'Indicamos los nombres y ubicaciones de la Carpeta a mover...
RutaCarpetaVieja = "E:\excelforo\00CarpetaVieja"
RutaCarpetaNueva = "E:\excelforo\00CarpetaNueva"
'OJO!!!: no podremos crear una carpeta ya existente!!!

'con este objeto proporcionamos acceso al sistema de archivos de nuestro equipo...
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")

'controlamos que no hayamos terminado nuestra ruta con barra invertida \
'ni en la Carpeta Vieja
If Right(RutaCarpetaVieja, 1) = "\" Then
    RutaCarpetaVieja = Left(RutaCarpetaVieja, Len(RutaCarpetaVieja) - 1)
End If
'ni en la Nueva
If Right(RutaCarpetaNueva, 1) = "\" Then
    RutaCarpetaNueva = Left(RutaCarpetaNueva, Len(RutaCarpetaNueva) - 1)
End If
'También verificamos que existe la carpeta original a mover...
If FSO.FolderExists(RutaCarpetaVieja) = False Then
    MsgBox "EH!!!, esta " & RutaCarpetaVieja & " no existe!!!"
    Exit Sub
End If
'y que NO existe el destino....
If FSO.FolderExists(RutaCarpetaNueva) = True Then
    MsgBox "Atención!!! la Carpeta" & RutaCarpetaNueva & " ya existe..." & vbCrLf & _
    ", y NO es posible desplazarla a una Carpeta ya existente!!!"
    Exit Sub
End If

'Momento para cambiar la ubicación de la Carpeta.
'Empleamos el método MoveFolder para mover de un lugar a otro...
FSO.MoveFolder Source:=RutaCarpetaVieja, Destination:=RutaCarpetaNueva

'mensaje de confirmación
MsgBox "Hemos movido la Carpeta " & RutaCarpetaVieja & " hasta la nueva ubicación " & RutaCarpetaNueva

End Sub



Y tras ejecutar nuestro procedimiento obtendríamos la nueva Carpeta..., por supuesto, la vieja ha desaparecido...

VBA: El método .MoveFolder o cómo cambiar Carpetas de ubicación.

No hay comentarios:

Publicar un comentario en la entrada