1

「最終変更:」フィールドを持ついくつかのテーブルがあるそのテーブルに変更が加えられた場合、フィールドは現在の日付に更新されます。

本来の動作をするマクロを実装しましたが、残念ながら「リバース」(Strg + Z)機能が無効になり、非常に煩わしかったです。そのため、逆機能が再び機能するようにマクロを編集しました。私のマクロは次のようになります。

Option Explicit
Public Merker

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not ThisWorkbook.ReadOnly Then
        Application.OnUndo "Rev. Change", "Wiederherstellen"
        Merker = Cells(3, 2)
        Cells(3, 2) = Date
    End If
End Sub

Sub Wiederherstellen()
    Cells(3, 2) = Merker
End Sub

このマクロを適用すると、ドキュメントに変更を加えるとすぐにExcelがクラッシュします。私のコードに何か無効なものがありますか?エラーメッセージや間違った動作はなく、アプリケーションがクラッシュするだけなので、私は本当に疑問に思っています。このクラッシュは毎回確実に発生します。

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

4

1 に答える 1

5

あなたのイベントは、無限ループで自分自身を呼び出している可能性があります。イベントを無効にして、この行でコードが自分自身を再呼び出ししないようにしてくださいCells(3, 2) = Date

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not ThisWorkbook.ReadOnly Then
    Application.EnableEvents = False
        Application.OnUndo "Rev. Change", "Wiederherstellen"
        Merker = Cells(3, 2)
        Cells(3, 2) = Date
    Application.EnableEvents = True
    End If
End Sub
于 2013-03-21T12:08:24.447 に答える