Как заставить VBA отменить скрипт?

Как я могу отменить код VBA, если нажата кнопка отмены. У меня есть...

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim ws As Worksheet
Set ws = Sheets("EDITS")
Dim tbl As ListObject
Set tbl = ws.ListObjects("Table1")
Dim newrow As ListRow
Set newrow = tbl.ListRows.Add

SavePrompt.Show

With newrow
    .Range(1) = Now
    .Range(2) = SavePrompt.TextBox1.Text
End With

End Sub

и добавил...

Private Sub CommandButton1_Click()

SavePrompt.Hide

End Sub

И,

Private Sub CommandButton2_Click()

Cancel = True

End Sub

в раздел Макрос проекта рабочей книги.

Но по какой-то причине я не уверен, как заставить код отменить, поскольку пользователь понимает, что не хочет сохранять изменения, которые они по какой-то причине внесли в книгу. Этот SavePrompt помогает диагностировать, что и когда было изменено.


person Kenny    schedule 25.05.2018    source источник
comment
Является ли ваша SavePrompt пользовательской формой?   -  person Mistella    schedule 25.05.2018
comment
@Mistella Да, SavePrompt — это пользовательская форма.   -  person Kenny    schedule 25.05.2018
comment
Итак, если я правильно понимаю, вы пытаетесь использовать значение, определенное/в пользовательской форме, чтобы повлиять на значение переменной Cancel (которая существует только в модуле Workbook_BeforeSave). Я думаю, было бы полезно, если бы вы проверили эти ссылки: stackoverflow.com/a/41351485/9259306 (об области переменных) и stackoverflow.com/q/18966137/9259306 (о возврате переменной из пользовательской формы)   -  person Mistella    schedule 25.05.2018


Ответы (1)


Я думаю, вы имеете в виду, что когда пользователь нажимает кнопку отмены, вы хотите очистить список строк. Если это так, просто сделайте следующий простой код.

Private Sub ListObject_Delete()
    Dim List1 As Microsoft.Office.Tools.Excel.ListObject = _
        Me.Controls.AddListObject(Me.Range("A1", "D4"), "List1")

    If DialogResult.Yes = MessageBox.Show("Delete the ListObject?", _
        "Test", MessageBoxButtons.YesNo) Then
        List1.Delete()
    End If

End Sub
person P113305A009D8M    schedule 25.05.2018
comment
Я больше хочу, чтобы либо пустая строка была добавлена ​​в таблицу 1, либо VBA отменяла сохранение. - person Kenny; 25.05.2018