MsgBox появляется дважды, используя Если ответ = Да / Нет / Отмена - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь создать макрос, который даст мне окно сообщения перед закрытием Excel, чтобы спросить, хочу ли я сохранить изменения. Когда я выбираю «Нет» в окне сообщения, сообщение снова всплывает, затем во второй раз, когда я выбрал «Нет», оно закрывается.

Я не очень разбираюсь в программировании на VBA, я просто пытаюсь записывать макросы, а затем слегка их редактировать. Я также ищу в Интернете и копирую пасту. Вот как я собрал этот код ниже, но, очевидно, что-то не так. (хотя это работает) Интересно, может кто-нибудь посоветовать мне, что нужно изменить в этом коде? Любая помощь приветствуется, Спасибо

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Dim answer As String
    Dim question As String
    Dim OrigName As String


    question = "Do you want to save Changes?"
    answer = MsgBox(question, vbYesNoCancel)

    If answer = vbCancel Then
        Exit Sub
    End If

    If answer = vbNo Then
        ActiveWorkbook.Close SaveChanges:=False
    End If

    If answer = vbYes Then
        ActiveWorkbook.Save
        ActiveWorkbook.SaveAs ("C:\Users\me\Documents\reports\Backup\" + ActiveWorkbook.Name & Format(Now(), "DD-MMM-YYYY hh-mm") & ".xlsm")
        Exit Sub
    End If

End Sub

1 Ответ

0 голосов
/ 09 ноября 2018

Попробуйте это:

Вы уже закрываете книгу, поэтому нет необходимости снова закрывать ее в своем коде. Просто «обманывайте» Excel, чтобы думать, что изменения сохраняются с ThisWorkbook.Saved = True (Примечание. Это только говорит Excel о том, что изменения были сохранены - на самом деле они не сохраняются ) и выиграл не предлагает сохранить изменения.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Select Case MsgBox("Do you want to save Changes?", vbYesNoCancel)
    Case vbCancel
        Cancel = True
    Case vbNo
        ThisWorkbook.Saved = True
    Case vbYes
        ThisWorkbook.Save
        ThisWorkbook.SaveAs ("C:\Users\me\Documents\reports\Backup\" + ActiveWorkbook.Name & Format(Now(), "DD-MMM-YYYY hh-mm") & ".xlsm")
    End Select

End Sub

И использование ThisWorkbook в вашем случае было бы лучше, чем использование ActiveWorkbook.

...