У меня есть файл, который я пытаюсь заставить контролировать версию. Пользователь попросил его работать следующим образом: при сохранении файла Excel должен сохранить исходную версию файла в ту, в которой в имени файла указана дата и время, а затем в том, что в обновлении не будет даты и времени. после этого.
Я написал vba, чтобы справиться с большей частью этого, я просто не могу заставить его хорошо играть с Sub Workbook_BeforeSave
.
Вот то, что у меня есть для сохранения, это работает как задумано, если я просто запускаю макрос VersionControl()
.
Sub VersionControl()
Dim myFileName As String, originalName As String, tempFileName As String, wbOld As Workbook
originalName = ThisWorkbook.FullName
myFileName = NewPath()
Application.DisplayAlerts = False
tempFileName = ThisWorkbook.Path & "\Version_Control_Temp.xlsm"
ActiveWorkbook.SaveAs Filename:=tempFileName, FileFormat:=xlOpenXMLWorkbookMacroEnabled
Set wbOld = Workbooks.Open(originalName, False, True)
wbOld.SaveAs Filename:=myFileName, FileFormat:=xlOpenXMLWorkbookMacroEnabled
wbOld.Close
ActiveWorkbook.SaveAs Filename:=originalName, FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub
Function NewPath() As String
Dim testString As String, fullPath As String
testString = Year(Now) & "_" & Format(Month(Now), "00") & "_" & Format(Day(Now), "00") & "_" & Hour(Now) & Minute(Now)
fullPath = ThisWorkbook.FullName
fullPath = Left(fullPath, Len(fullPath) - 5) & "_" & testString & ".xlsm"
NewPath = fullPath
End Function
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
If Not SaveAsUI Then
Call VersionControl
Cancel = True
End If
End Sub
Проблема, с которой я, похоже, сталкиваюсь, заключается в том, что если я вызываю VersionControl()
изнутри события Workbook_BeforeSave
, запускается попытка запустить VersionControl()
для каждого SaveAs, который я выполняю.