0

この問題を解決するのに深刻な問題があります:

BeforeClose を実行する必要があるマクロを含む Excel ワークブック (2010 以降) があります。内部データを削除し、この変更を保存します: (今のところ問題ありません)

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim xlSheet As Worksheet

For Each xlSheet In Sheets
    If xlSheet.Name = "internalDataSource" Then
        MsgBox "Internal data will be deleted from the workbook. Changes are saved."
        Application.DisplayAlerts = False
        xlSheet.Delete
        ThisWorkbook.Save
        Application.DisplayAlerts = True
    End If
Next xlSheet

End Sub

私の問題: ユーザーは何かを変更できるはずです。ユーザーが何かを変更すると、通常、変更を保存するかどうかを尋ねられます。このバージョンでは、変更を保存する以外に選択肢はありません。現在、それらは常に保存されます。

ユーザーが「いいえ、変更を保存しないでください」と言うことができるようにするにはどうすればよいですか。それでもマクロを実行し、後で内部データの削除を保存しますか?

すべての変更を最後に保存された状態に戻すための VBA コマンドを必死に探しています。次に、上からマクロを実行して、削除を保存します。

助けてくれてありがとう!

4

1 に答える 1

1

これは、通常の保存が行われるたびにワークブックのコピーを保存し、内部データをコピーに移動し、コピーの名前を元の名前に変更することで実行できます。これを具体的に行う方法にはいくつかのオプションがあります。ここにいくつかの提案を投稿して、私の答えを洗い流します。

Workbook_BeforeSaveコピーを保存すると、イベントに配置できます。

コピーの名前を元の名前に変更するには、Workbook_BeforeCloseここにリストした手順を実行できます。

ユーザーを超えてメッセージボックスを実行するには、リストした MsgBox を次のように編集することを検討してください。

If (MsgBox("You are attempting to exit." & vbNewLine _
& "All changes since the last save will be lost." & vbNewLine _
& "Okay to proceed?", 308) = vbNo) Then
  Cancel = True
End If

もちろん、内部データが保存されるため、「最後の保存以降のすべての変更が失われる」わけではありません。

于 2013-09-13T13:50:30.477 に答える