Я не уверен насчет sharepoint, но это работает, если файл сохраняется в обычной папке. Решение может быть принято разными способами.
Сохраните код в следующем месте в редакторе VBA. Назовите подпункт «Private Sub Workbook_Open()
» - чтобы указать, что Excel должен выполнить код при его открытии. Вы можете видеть, что вы добились успеха, когда поле «процедура» меняется на «Открыть», помеченное на рисунке желтым цветом.
Альтернатива 1:
Здесь я жестко закодировал свой путь, написав "G:\Till\"
. Затем я продолжаю добавлять метку времени и выбираю, какой формат. Обратите внимание на то, что вы не можете использовать точку с запятой":" в пути. Одним из способов является добавление «T» для времени, а затем час + минута + секунда. В моем примере кода результат будет: «Пример данных - 2019-11-03 T203533.xlsm»
Обратите внимание, что этот код получит ошибку 1004, если путь не существует.
Private Sub Workbook_Open()
Dim Fldr As String
Application.DisplayAlerts = False 'Hide any save window pop-up
ActiveWorkbook.SaveCopyAs Filename:="G:\Till\" & "Data Example - " & Format(Now(), "yyyy-MM-dd Thhmmss") & ".xlsm" 'Save the workbook as a copy of the original. Add Hour and timestamp
Application.DisplayAlerts = True
End Sub
Альтернатива 2:
Чтобы сделать код более надежным, я проверяю путь к используемой книге, а затем проверяю, существует ли папка «Архив». Если он не существует, он создаст папку и сохранит копию файла.
Private Sub Workbook_Open()
Dim Fldr As String
Application.DisplayAlerts = False 'Hide any save window pop-up
Fldr = Dir(Application.ActiveWorkbook.Path & "\Archive\", vbDirectory) 'Check if folder exists. The variable will be empty if no folder exists.
If Fldr = Empty Then 'If no folder exist, the variable "Folder"
MkDir Application.ActiveWorkbook.Path & "\Archive\" 'Create the folder
End If
ActiveWorkbook.SaveCopyAs Filename:=Application.ActiveWorkbook.Path & "\Archive\" & "Data Example - " & Format(Now(), "yyyy-MM-dd Thhmmss") & ".xlsm"
Application.DisplayAlerts = True
End Sub