Macro para guardar versiones de un archivo de excel

Tengo este macro que me dieron, la cual es para guardar varias versiones de un mismo archivo de excel, y así generar un historial. Entonces al guardarlo, como veras, está para que se guarde con el nombre "ARCHIVO"_v1.xlsm, "ARCHIVO"_v2.xlsm y así continuamente . Aquí te lo dejo:

Sub GuardarVersion()
Dim fileName As String, index As Long
If InStr(ActiveWorkbook.Name, "_v") = 0 Then
fileName = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, ".") - 1) & "_v1.xlsm"
ActiveWorkbook.SaveAs (fileName)
Else
index = CInt(Split(Right(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - InStr(ActiveWorkbook.Name, "_v") - 1), ".")(0))
index = index + 1
fileName = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, "_v") - 1) & "_v" & index & ".xlsm"
End If
ActiveWorkbook.SaveAs (fileName)
End Sub

Pero lo que yo quiero, además de que vayan aumentando los números, es que se guarde con el texto que está en la celda B8 .Por eso es que intenté cambiarlo y me quedó algo así.

Sub GuardarVersion()
Dim fileName As String, index As Long
If InStr(ActiveWorkbook.Name, "_v") = 0 Then
fileName = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, ".") - 1) & Range("B8").Value & "_v1.xlsm"
ActiveWorkbook.SaveAs (fileName)
Else
index = CInt(Split(Right(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - InStr(ActiveWorkbook.Name, "_v") - 1), ".")(0))
index = index + 1
fileName = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, "_v") - 1) & Range("B8").Value & "_v" & index & ".xlsm"
End If
ActiveWorkbook.SaveAs (fileName)
End Sub

Al probarlo , si me sale el texto de la celda 8 pero como veras no se elimina el anterior texto , sino que se acumula.Ya que por ejemplo hoy es B8= martes , entonces se guarda como "Facturamartes_v1.xlsm"

Entonces lo que yo deseo que si mañana cambio a B8= miercoles , se guarde "Facturamiercoles_v2" .Pero se guarda "Facturamartesmiercoles_v2". Como ves se acumula el texto. No sé si me puedas ayudar con esto. Además de si se podría poner algo más para indicarle donde se debe de guardar, porque se guardan en mi Escritorio y yo quisiera guardarlo en Disco C.

Respuesta
2

H o l a : Te anexo la macro actualizada

Cambia "C:\trabajo\" por la ruta en donde quieras guardar el archivo, si solamente quieres que sea en C, entonces pon "C:\"

Sub GuardarVersion()
    ruta = "C:\trabajo\"
    If InStr(ActiveWorkbook.Name, "_v") = 0 Then
        nombre = ruta & "Factura " & Range("B8").Value & "_v1.xlsm"
    Else
        n = CInt(Split(Right(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - InStr(ActiveWorkbook.Name, "_v") - 1), ".")(0))
        n = n + 1
        nombre = ruta & "Factura " & Range("B8").Value & "_v" & n & ".xlsm"
    End If
    ActiveWorkbook.SaveAs nombre
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Muchísimas gracias . Era justo lo que necesitaba.Hay otra pregunta en mi perfil que tengo duda . Sería de gran ayuda que la vieras y ver si me puedes ayudar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas