He creado una plantilla para el registro de cambios. Estas son las solicitudes y la administración posterior en el proceso. Tengo un código en esta plantilla para guardar el archivo como un libro de trabajo habilitado para macros de Excel, siempre. El problema con este código es que no puedo definir una carpeta específica para guardar los documentos. En todos los casos, aparecerá el cuadro de diálogo Guardar como y el usuario debe poder definir su propio nombre de archivo. Quiero definir la ruta para todos los usuarios. ¿Alguien sabe cómo agregar una ubicación de archivo (ruta) en esta macro para que funcione?

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim FileNameVal As String
If SaveAsUI Then
    FileNameVal = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm")
    Cancel = True
    If FileNameVal = "False" Then 'User pressed cancel
        Exit Sub
    End If
    Application.EnableEvents = False
        If Right(ThisWorkbook.Name, 5) <> ".xlsm" Then
            ThisWorkbook.SaveAs Filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled
        Else
            ThisWorkbook.SaveAs Filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled
        End If
    Application.EnableEvents = True
End If
End Sub

Gracias de antemano.

Saludos cordiales, Remco H.

1
Remco H. 14 dic. 2016 a las 00:19
Si desea obligarlos a usar su ruta y solo permitirles que den un nombre de archivo, ¿por qué usar el cuadro de diálogo GetSaveAsFilename? Simplemente use un InputBox y pídales que proporcionen el nombre del archivo (y luego anteponer su camino fijo a lo que sea que den)? O, si desea utilizar GetSaveAsFilename para que puedan hacer clic en un nombre de archivo existente en lugar de escribirlo, puede quitar la parte de la ruta de FileNameVal y poner su propia ruta, o podría Haga que el usuario siga eligiendo nombres de archivo hasta que la ruta coincida con la ruta requerida.
 – 
YowE3K
14 dic. 2016 a las 01:18
El nombre de archivo que estoy usando es yymmdd-followup como en 161214-1, 14 de diciembre de 2016 con el número de seguimiento 1. Con el cuadro de diálogo Guardar como, siempre deben verificar el número de seguimiento disponible en la carpeta específica. No es posible definir el nombre correcto sin verificar la carpeta. Entonces, lo que tengo ahora es que aparece el cuadro Guardar como y el documento está configurado en el libro de trabajo habilitado para macros. Solo necesito la ruta especificada. O es posible crear el nombre del archivo automáticamente con el número de seguimiento correcto (verificando la carpeta). En ese caso, puedo trabajar con eso. Pero es posible que necesite ayuda o consejos ...
 – 
Remco H.
14 dic. 2016 a las 22:33

1 respuesta

La mejor respuesta

Si desea generar un nombre de archivo único, puede usar algo como la siguiente función:

Function NextFileName(basename As String) As String
    Dim followup As Integer
    Dim pathname As String
    pathname = "C:\Temp\Temp\" ' Include the trailing path separator so that we don't have to do it later
    followup = 1
    Do
        NextFileName = pathname & basename & "-" & followup & ".xlsm"
        If Dir(NextFileName) = "" Then Exit Function
        followup = followup + 1
    Loop
End Function

Luego puede llamarlo desde su código principal como

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim FileNameVal As String
    If SaveAsUI Then  ' <-- Exclude the IF statement if you want EVERY save to have a new follow up number
                      '     rather than just "Save As" saves
        Application.EnableEvents = False
        'Generate the filename
        FileNameVal = NextFileName(Format(Now, "yymmdd"))
        ThisWorkbook.SaveAs Filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled
        'Maybe advise the user that the save has happened, and where it went to
        MsgBox "Spreadsheet saved as " & FileNameVal
        Cancel = True
        Application.EnableEvents = True
    End If
End Sub
0
YowE3K 14 dic. 2016 a las 23:34
Gracias por tu ayuda. Esto está funcionando casi a la perfección. Cuando presiono guardar en el documento, todavía tengo que hacer clic en un mapa aleatorio (carpeta). Después de seleccionar el mapa aleatorio, genera automáticamente el nombre de archivo específico con el seguimiento en la carpeta correcta.
 – 
Remco H.
14 dic. 2016 a las 23:17
@RemcoH. - No muestre el cuadro de diálogo, simplemente guarde el archivo donde desea que vaya. (Ver editar)
 – 
YowE3K
14 dic. 2016 a las 23:28
Esto creó otro problema. Guardar el archivo generará un nuevo número automáticamente. Por ejemplo, edité el documento 161214-3 y estoy tratando de guardarlo, automáticamente creará un nuevo número (161214-4). La plantilla tiene que crear nuevos números, pero la edición de un documento existente no debe cambiar el nombre después de guardar. ¡Tan cerca!
 – 
Remco H.
14 dic. 2016 a las 23:37
@RemcoH. Después de mi edición mencionada anteriormente, la volví a editar poco después para volver a colocar el If SaveAsUI Then (con un comentario para deshacerme del If si querías que generara un nuevo número cada vez). Verifique para asegurarse de estar viendo la última edición. Entonces, para mi prueba, terminó actualizando el número si hice un "Guardar como" pero dejé el número sin cambios con un "Guardar".
 – 
YowE3K
14 dic. 2016 a las 23:44