我已经有了代码,但我想知道是否可以更改此代码,或者是否有代码可以检查E列中的单元格是否为空,并清除A列中单元格中的内容有人退出行
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 5 Then
If Target.Value = vbEmpty Then
Cells(Target.Row, 1).ClearContents
End If
End If
End Sub
答案 0 :(得分:1)
根据DirkReichel的建议编辑
在A1中添加此公式:
=IF(E1="","",IF(LEN(A1),A1,TODAY()))
现在,根据需要将其向下拖动到" A" 列中。如果列" E" 中有值,它会在" A" 列中添加今天的日期。否则," A" 列将保持为空
答案 1 :(得分:0)
代码的第一位检查E列上的更改以清除A列。
所以我们只需要再次做同样的事情,但在更改A列时检查E列是否为空。
这样,如果您更改A列上的值,并且在同一行,E列为空,则会清除您输入的内容。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 5 Then
If Target.Value = vbEmpty Then
Cells(Target.Row, 1).ClearContents
End If
Elseif Target.Column = 1 Then
If Cells(Target.Row, 5).Value = vbEmpty Then
Cells(Target.Row, 1).ClearContents
End If
End If
End Sub
编辑:因此,在您的评论之后,以下是您应该如何使用您的代码
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 5 Then
If Target.Value = vbEmpty Then
Cells(Target.Row, 1).ClearContents
Else
'Insert here whatever code you got on the single click event (Except the sub and end sub)
End If
Elseif Target.Column = 1 Then
If Cells(Target.Row, 5).Value = vbEmpty Then
Cells(Target.Row, 1).ClearContents
End If
End If
End Sub
答案 2 :(得分:0)
您正在尝试获取" last"的信息。选择改变....但没有内置解决方案。使用全局变量,您仍然可以这样做:
Dim oldTarget As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If oldTarget Is Nothing Then GoTo e
If oldTarget.Rows.Count > 1 Then
Dim x As Range
For Each x In oldTarget.Rows
If x.Cells(1, 5).Value = "" Then x.Cells(1, 1).Value = ""
Next
Else
If oldTarget.Cells(1, 5).Value = "" Then oldTarget.Cells(1, 1).Value = ""
End If
e: Set oldTarget = Target.EntireRow
End Sub
如您所见:Dim oldTarget As Range
位于sub之外。这样设置值/对象一直保持到VBA停止(关闭工作簿/直接重置vba)