Как я могу использовать VBA, чтобы вернуть ThisWorkbook в ранее сохраненное состояние? - PullRequest
0 голосов
/ 27 февраля 2019

Мне бы хотелось, чтобы макрос отменял ВСЕ изменения с момента последнего открытия / сохранения книги.

Я подумал, что это будет так же просто, как повторно открыть книгу, подобно этому ответу: https://stackoverflow.com/a/44244262/1473412

Однако, когда я использую:

Workbooks.Open(ThisWorkbook.FullName)

Буквально НИЧЕГО не происходит.Нет оповещений, нет ошибок, нет изменений.Это как если бы команда просто игнорировалась.Изменилось ли это поведение в последних версиях Excel?

Какой самый простой способ вернуть книгу в ее ранее сохраненное состояние в последней версии Excel (2016)?

Спасибо,

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Логика:

Закройте файл Excel без сохранения и просто снова откройте его.Но тогда как мне открыть его из того же файла?

  1. Создать VBScript из вашего кода
  2. Установите задержку, скажем, на 3 секунды, и код для открытия файла Excel
  3. Вызовите vbscript и закройте текущий файл.

Это то, что вы пытаетесь?

Sub Sample()
    Dim file As String
    file = ThisWorkbook.Path & "\DeletemeLater.vbs"

    Sheet1.Range("A2").Value = "Blah Blah" '<~~ This change will not be saved

    '~~> Create a vbscript file
    Open file For Output As #1
    Print #1, "WScript.Sleep 300"
    Print #1, "Set oExcelApp = GetObject(,""Excel.Application"")"
    Print #1, "oExcelApp.Visible=True"
    Print #1, "Set oWB = oExcelApp.Workbooks.Open(" & Chr(34) & ThisWorkbook.FullName & Chr(34) & ")"
    Close #1

    Shell "wscript " & Chr(34) & file & Chr(34), vbNormalFocus

    ThisWorkbook.Close (False)
End Sub

И еще одна вещь.Добавьте это в область кода рабочей книги

Private Sub Workbook_Open()
    On Error Resume Next
    Kill ThisWorkbook.Path & "\DeletemeLater.vbs"
    On Error GoTo 0
End Sub
0 голосов
/ 27 февраля 2019

Попробуйте этот обходной путь:

Public Sub ReOpenWithoutSave()
    Application.EnableEvents = False
    ThisWorkbook.Saved = True
    ThisWorkbook.ChangeFileAccess xlReadOnly, , False
    Application.Wait Now + TimeValue("00:00:01")
    ThisWorkbook.ChangeFileAccess xlReadWrite, , True
    Application.EnableEvents = True
End Sub
  • Он помечает ThisWorkbook как уже сохраненный (но не сохраняет его).
  • Он делает ThisWorkbook только для чтения и ожидает1 секунда для продолжения
  • Это делает ThisWorkbook доступной для записи снова (что вызывает повторное открытие автоматически)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...