试图让脚本不运行,如果一个单元格不是空白的

代码是相对简单的。 如果我点击L8:L98中的一个单元格,并且单元格是空白的,那么单元格中会放入“T”,其他相关单元格将被清空。

If Intersect(Target, Range("C7:C98")) Is Nothing And Not Intersect(Target, Range("L7:L98")) Is Nothing Then Application.EnableEvents = False With Intersect(Target, Range("L7:L98")) .Value = "T" .Offset(, 1).Resize(, Col).ClearContents End With 

我的问题是,如果C列中的同一行上的单元格中有数据,我希望if语句返回false并跳过它。 我也尝试了Intersect(target.offset(, -9)...和没有相交的代码,也没有为我工作。

由于VBA不会短路,因此最好将代码分解成两个IFtesting(所以第二个条件不是不必要地运行):

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("L7:L98")) Is Nothing Then If Len(Cells(Target.Row, "C")) = 0 Then Application.EnableEvents = False With Intersect(Target, Range("L7:L98")) .Value = "T" 'presume you set Col elswehere? .Offset(, 1).Resize(, Col).ClearContents End With Application.EnableEvents = True End If End If End Sub 

相交testing你点击的单元格是否在范围内,除非你同时点击C中的单元格和L中的单元格,否则你永远不会满足If。

那么让我们来testing同一行的列C中的单元格是否为空。

 If Range("C" & Target.Row)="" And Not Intersect(Target, Range("L7:L98")) Is Nothing Then Application.EnableEvents = False With Intersect(Target, Range("L7:L98")) .Value = "T" .Offset(, 1).Resize(, Col).ClearContents End With