2017-03-08 208 views
2

我有一个Excel工作表与一些VBA代码,当我改变一个特定的单元格时,它会自动将今天的日期设置到它旁边的单元格中。Excel Worksheet_Change事件触发时删除行

这一切都很好,但是当我删除特定单元格上方的整行时,它会自动将日期更改为今天的日期。

这是我使用的代码会自动更改单元格:

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim WorkRng As Range 
Dim Rng As Range 
Dim xOffsetColumn As Integer 
Set WorkRng = Intersect(Application.Sheets("Example").Range("H10: H306, M10: M306, R10: R306, W10: W306, AB10: AB306, AG10: AG306"), Target) 
xOffsetColumn = 1 
If Not WorkRng Is Nothing Then 
    Application.EnableEvents = False 
    For Each Rng In WorkRng 
     If Not VBA.IsEmpty(Rng.Value) Then 
     Sheets("Example").Unprotect 
      Rng.Offset(0, xOffsetColumn).Value = Now 
      Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy" 
     Sheets("Example").Protect 
     Else 
      Rng.Offset(0, xOffsetColumn).ClearContents 
     End If 
    Next 
    Application.EnableEvents = True 
End If 
End Sub 

是有人熟悉这个问题?

回答

0

你可以做一些测试的范围Target,避免执行代码
(与Goto或者说Exit Sub):

  • Target.Cells.Count > 1
  • Target.Rows.Count > 1
  • Target.Columns.Count > 1

你可以使用这些t在小组的开始或If Not WorkRng Is Nothing Then

的EST所以,你的代码可能是:

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim WorkRng As Range 
Dim Rng As Range 
Dim xOffsetColumn As Integer 

If Target.Columns.Count > 1 Then Exit Sub 

Set WorkRng = Intersect(Application.Sheets("Example").Range("H10: H306, M10: M306, R10: R306, W10: W306, AB10: AB306, AG10: AG306"), Target) 
xOffsetColumn = 1 
If Not WorkRng Is Nothing Then 
    Application.EnableEvents = False 
    For Each Rng In WorkRng 
     If Not VBA.IsEmpty(Rng.Value) Then 
     Sheets("Example").Unprotect 
      Rng.Offset(0, xOffsetColumn).Value = Now 
      Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy" 
     Sheets("Example").Protect 
     Else 
      Rng.Offset(0, xOffsetColumn).ClearContents 
     End If 
    Next 
    Application.EnableEvents = True 
End If 
End Sub 
+0

非常感谢您!这解决了我的问题。 – Graaf

+0

很高兴能帮到你! ;)@Graaf – R3uK