VBA清除内容

时间:2017-09-21 13:03:32

标签: excel excel-vba 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

3 个答案:

答案 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)