我写了下面的代码,如果活动单元格= 'yes'或'no',就在右边的单元格中输入日期。这部分代码工作得很好,但由于某种原因,当活动单元格不符合条件时,我希望它清除右边两个单元格的内容。任何建议都将不胜感激。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
' The variable KeyCells contains the cells that will cause an input
'date and time in next 2 cells to the right when active cell is changed.
Set KeyCells = ActiveSheet.ListObjects("VW_P1_P2").ListColumns("C1 Made Contact?").Range
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
If Target = "Yes" Or Target = "No" Then
ActiveCell.Offset(-1, 1).Value = Format(Now, "mm/dd/yyyy")
ActiveCell.Offset(-1, 2).Value = Format(Now, "hh:mm")
Else
ActiveCell.Offset(-1, 1).ClearContents
ActiveCell.Offset(-1, 2).ClearContents
End If
End If
End Sub
1条答案
按热度按时间0aydgbwb1#
几个问题/改进:
Me
来参照父工作表,而不要使用ActiveSheet
。ActiveCell
,而改用Target
来指涉变更的储存格。Range(Target.Address)
是多余的。请使用Target
。Target
是一个多单元格区域,则不能将其与"Yes"
或"No"
进行比较,因此使用循环。.ListColumns("C1 Made Contact?").DataBodyRange
而不是.ListColumns("C1 Made Contact?").Range
,这将排除列标题C1 Made Contact
。Date
来代替Format(Now, "mm/dd/yyyy")
。编辑:
如果
KeyCells
是表中的多个列,则可以使用Union
: