Excel VBA以清除内容

Excel VBA以清除内容,excel,vba,Excel,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 E

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

代码的第一位检查列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

根据DirkReichel建议编辑

在A1中添加此公式:

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

现在,在您的列“A”中将其向下拖动到所需的位置。如果列“E”中有值,它将在列“A”中添加今天的日期。否则列“A”将保持为空

您试图在更改时获取“最后一次”选择的信息。。。。但是没有内置的解决方案。使用全局变量,您仍然可以执行以下操作:

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停止(关闭工作簿/直接重置VBA)

您所说的“某人退出行”是什么意思?我测试了此代码,它检查E列是否有更改。如果更改为
vbEmpty
(或空白),它将删除A列同一行的值。如果我理解正确:请尝试
专用子工作表\u selection change
。如果我单击行中的任何位置,我已经有一个代码将日期放在A列中。如果E中没有任何内容,我想做的是清除内容,然后离开该行。现在,只有当我在E中放入某个内容并将其删除,或者单击它并尝试键入时,代码才会删除。我希望它检查并查看E中的任何内容是否自动清除,而无需进入E列中的单元格并删除E列中的单元格A@Jochen当我添加选择更改时,它仅在我单击时在A列中清除在行内,我希望当我单击行外并看到E列中的单元格为空时,它清除A列中的内容第一:为什么
日期(年(现在()),…
?只要格式正确,只要
now()
就可以了(也可以
today()
)…第二:日期将不稳定…第二天打开wb将把A列中的所有日期更改为实际日期…@DirkReichel:是的,你是对的。我忘记了今天的
。但是正如你提到的,日期将在第二天更改,所以这种方法不起作用。我将删除我的回答打开迭代并运行A1
=IF(E1=“”,“”,如果(LEN(A1),A1,TODAY())
(可以抄下来);@DirkReichel:你的答案,我不认为这是我的功劳:)。我刚刚把
ISBLANK($E1)
改成了
E1=“”
,这同样适用于
日期(年(现在())、月(现在())、日(现在())
改成
TODAY()
。。。唯一的新零件是
IF(LEN(A1),A1,
…看看它:66%的公式是你的工作:大家都知道我从@Mocair获得的代码是有效的,但它在我已经拥有的行中的任意位置取消了一次单击事件,将日期放入A列,我可以取回它,保留它生成的代码,所以我必须在E列中为代码f添加一些内容或者我之前工作的日期大家好,我从@Mocair获得的代码可以工作,但它可以取消我已经拥有的行中任何地方的单击事件,将日期放入A列,我可以拿回它,保留它生成的代码,因此我必须在E列中输入一些内容,以用于我之前工作的日期除非列E上有数据,否则它将取消。否则它将工作。您可以使用相同的代码更改工作表来执行单击代码。我将编辑答案以显示编辑将检查的位置:如果将列E更改为空,它将删除列A上的值。如果将列E更改为其他非空的值,它将运行code、 如果Target.Column=5,则更改私有子工作表(ByVal Target作为范围);如果Target.Value=vbEmpty,则更改单元格(Target.Row,1);如果ElseIf Target.Column=1,则更改日期结束;如果Cells(Target.Row,5),则更改单元格(Target.Value=vbEmpty,则更改单元格)(Target.Row,1)ClearContents End If End If End If End sub这是代码吗?很抱歉,在我将它输入注释框后,它更改了格式