Modificar Macro para guardar en otro directorio

Tengo una macro que me guarda la hoja "historico" en el mismo directorio donde tengo el libro activo es la siguiente:

Sub RealizaCopiaHistorico()
PathActual = ActiveWorkbook.Path
NombreLibro = PathActual + "\" + ActiveWorkbook.Name
NombreCopia = Mid(NombreLibro, 1, Len(NombreLibro) - 4) + " HISTORICO Mes " + Format(Date, "MM-YYYY") + ".xlsx"
ActiveWorkbook.ActiveSheet.Copy
ActiveWorkbook.SaveCopyAs Filename:=NombreCopia
MsgBox ("Copia Historico Realizada")
ActiveWorkbook.Close False
End Sub

¿Se podría modificar para que me la guardase en otra carpeta diferente?
¿Esta carpeta podría llevar el nombre del contenido de la celda J1?

2 respuestas

Respuesta
1

Te anexo la macro para verificar si existe la carpeta que pusiste en la celda J1.

Si no existe la carpeta, te muestra un mensaje para que decidas guardar en la misma carpeta o cancelar para corregir el nombre de la carpeta que está en la celda.

Sub RealizaCopiaHistorico()
'Act.Por.Dante Amor
    celda = "J1"
    If ActiveSheet.Range(celda) = "" Then
        PathActual = ActiveWorkbook.Path
    Else
        If Dir(ActiveSheet.Range(celda)) = "" Then
            If MsgBox("La carpeta de la celda " & celda & ", no existe" & vbCr & vbCr & _
               "Deseas guardar en el mismo directorio", vbQuestion + vbYesNo, "REVISAR") = vbNo Then
                Exit Sub
            Else
                PathActual = ActiveWorkbook.Path
            End If
        Else
            PathActual = ActiveSheet.Range(celda)
        End If
    End If
    '
    NombreLibro = PathActual + "\" + ActiveWorkbook.Name
    NombreCopia = Mid(NombreLibro, 1, Len(NombreLibro) - 4) + " HISTORICO Mes " + Format(Date, "MM-YYYY") + ".xlsx"
    ActiveWorkbook.ActiveSheet.Copy
    ActiveWorkbook.SaveCopyAs Filename:=NombreCopia
    MsgBox ("Copia Historico Realizada")
    ActiveWorkbook.Close False
End Sub

Saludos.Dante Amor

No reconoce la carpeta existente cuyo nombre es el contenido de la celda j1 (es la fecha) siempre sale el cuadro de dialogo exista o no la carpeta,¿si no estuviera se podría hacer que la creara?

Te anexo la macro con las actualizaciones, supongo que quieres crear la carpeta debajo de donde tienes el archivo con la macro.

Nota: El nombre de las carpetas no pueden tener el carácter "/", no importa que la celda "J1" tengas la fecha 04/02/2015, la macro buscará la carpeta 04-02-2015, si la encuentra, en esa carpeta guardará el archivo.

Si no encuentra la carpeta, creará la carpeta 04-02-2015 y dentro de esta carpeta el archivo.

Sub RealizaCopiaHistorico()
'Act.Por.Dante Amor
    celda = "J1"
    PathActual = ActiveWorkbook.Path
    If ActiveSheet.Range(celda) = "" Then
        PathActual = ActiveWorkbook.Path
    Else
        ruta = PathActual & "\" & Format(Range(celda), "dd-mm-yyyy")
        If Dir(ruta, vbDirectory) = "" Then
            If MsgBox("La carpeta no existe, deseas crearla" & vbCr & vbCr & _
               "Deseas guardar en el mismo directorio", vbQuestion + vbYesNo, "REVISAR") = vbNo Then
                Exit Sub
            Else
                MkDir ruta
                PathActual = ruta
            End If
        Else
            PathActual = ruta
        End If
    End If
    '
    NombreLibro = PathActual + "\" + ActiveWorkbook.Name
    NombreCopia = Mid(NombreLibro, 1, Len(NombreLibro) - 4) + " HISTORICO Mes " + Format(Date, "MM-YYYY") + ".xlsx"
    ActiveWorkbook.ActiveSheet.Copy
    ActiveWorkbook.SaveCopyAs Filename:=NombreCopia
    MsgBox ("Copia Historico Realizada")
    ActiveWorkbook.Close False
End Sub

Saludos.Dante Amor

Respuesta
1

Hazlo así:

Sub RealizaCopiaHistorico()If [j1] <> "" Then        PathActual = [j1]    Else        PathActual = ActiveWorkbook.PathEnd IfNombreLibro = PathActual + "\" + ActiveWorkbook.NameNombreCopia = Mid(NombreLibro, 1, Len(NombreLibro) - 4) + " HISTORICO Mes " + Format(Date, "MM-YYYY") + ".xlsx"ActiveWorkbook.ActiveSheet.CopyActiveWorkbook.SaveCopyAs Filename:=NombreCopiaMsgBox ("Copia Historico Realizada")ActiveWorkbook.Close FalseEnd Sub

Si te ha valido la respuesta.

Sub RealizaCopiaHistorico()
If [j1] <> "" Then
        PathActual = [j1]
    Else
        PathActual = ActiveWorkbook.Path
End If
NombreLibro = PathActual + "\" + ActiveWorkbook.Name
NombreCopia = Mid(NombreLibro, 1, Len(NombreLibro) - 4) + " HISTORICO Mes " + Format(Date, "MM-YYYY") + ".xlsx"
ActiveWorkbook.ActiveSheet.Copy
ActiveWorkbook.SaveCopyAs Filename:=NombreCopia
MsgBox ("Copia Historico Realizada")
ActiveWorkbook.Close False
End Sub

Si no hay nada en la celda J1, pone el path actual, si no, lo que hay en la celda.

En la celda el nombre de carpeta debe comenzar por la letra de la unidad donde quieres grabar seguido de :\, así-> "C:\"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas