VBA Custom Save - PullRequest
       0

VBA Custom Save

2 голосов
/ 03 марта 2020

У меня есть файл, который я пытаюсь заставить контролировать версию. Пользователь попросил его работать следующим образом: при сохранении файла 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, который я выполняю.

1 Ответ

2 голосов
/ 03 марта 2020

Чтобы избежать бесконечного l oop, отключите события перед выполнением следующего сохранения


Sub VersionControl()
   Application.EnableEvets = False

       'Your code goes here

   Application.EnableEvents = True
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...