3

sheet1 に次のコードがあります (注 - このコードは、ワークブック オブジェクトやモジュールではなく、ワークシート オブジェクトにあります)。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Integer
r = ActiveCell.Row
Cells(r - 1, 7).Value = Now()
ActiveWorkbook.save
End Sub

誰かが理由を教えてもらえますか: 1. ActiveWorkbook.save は上記では機能しません。代わりに、無限ループに陥ります。2. F8 キーを押すだけでコードをステップ実行できない理由

ActiveWorkbook.save を別のモジュールに入れてから、ワークシートのコードからその関数を呼び出そうとしましたが、それも無限ループに陥りました。

4

2 に答える 2

3

無限ループを回避するには、イベントを無効にする必要があります

Private Sub Worksheet_Change(ByVal Target As Range)
application.enableevents=false
    Cells(target.row - 1, 7).Value = Now()
application.enableevents=true

ActiveWorkbook.save
End Sub
于 2012-12-14T17:20:59.203 に答える
1

セルを現在の日付で更新すると、ワークシート変更イベントが発生し、イベントコードが再度呼び出されるため、無限ループが発生します。以下に示すように、イベントを無効にする必要があります。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim r As Integer
r = ActiveCell.Row

Application.EnableEvents = False    
Cells(r - 1, 7).Value = Now()    
Application.EnableEvents = True    
ActiveWorkbook.Save

End Sub
于 2012-12-14T17:23:01.193 に答える