VBA清除内容

我已经有一个代码,但我想知道这个代码是否可以改变,或者是否有代码可以检查列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 

按照DirkReichel的build议编辑

在A1中添加这个公式:

 =IF(E1="","",IF(LEN(A1),A1,TODAY())) 

现在把它拖到你的列“A” ,只要你需要。 如果在“E”列中有一个值,它将在“A”列中添加今天的date。 否则列“A”将保持空白

您正在尝试获取“最后”select的信息,但是没有内置解决scheme。 有了全局variables,你仍然可以这样做:

 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是在子之外。 这样设置的值/对象保持到VBA get停止(closures工作簿/直接重置vba)

代码的第一位检查列E上的更改以清除列A.

所以我们只需要再次做同样的事情,但是当改变列A时检查列E是否为空。

这样,如果您更改列A的值,并且在同一行E列为空,则会清除您input的内容。

 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