用于清除相邻单元格的连续宏Excel VBA
我试图创建一个连续宏来检查列中的错误,如果存在,将清除相邻单元格中的内容。具有错误的列具有一个公式,该公式将根据相邻单元格中的值填写数据。所以我想要程序清除相邻单元格的值,如果输入的是无效值。这是我迄今为止,但我不确定如何指定一个相邻的单元格关联的错误。我放入X来表示不同的行值。用于清除相邻单元格的连续宏Excel VBA
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
Set ws = Worksheet(1)
If Target.Column = 2 Then
If IsError(Target.Value) Then
*- Range("AX").ClearContents -*
End If
End If
End Sub
与你的代码的问题是,要使用的事件Worksheet_Change
并识别式细胞作为目标。这将从不工作,公式结果中的更改不会被Worksheet_Change
事件触发。 (尽管你可以用Worksheet_Calculate
事件处理这些事件 - 但这不是你在这里需要的)。实际上要更改的单元格需要进行评估。
什么可能会更好地为您设置输入单元Data Validation以确保提供正确的输入。这样就不需要VBA。但是,如果这不起作用,下面的代码将工作。
Private Sub Worksheet_Change(ByVal Target As Range)
'worksheet_change will always work on the current worksheet, only identify _
another worksheet if you want to act on a range in a different sheet
'-> 3 assumes the input column is C (based on your description)
If Target.Column = 3 And IsError(Target.Offset(,-1)) And Target.Rows.Count = 1 and Target.Columns = 1 Then
Application.EnableEvents = False
Target.Offset(,-1).ClearContents
'Msgbox "Enter a valid value." ' possible warning message
Application.EnableEvents = True
End If
End Sub
谢谢!注意,有没有办法检查公式结果的变化? –
我需要的是清除输入内容,但如果我这样做,更改事件将继续触发并导致无限循环。 –
看到我的编辑@KevinLe - 我在原始答案中忘记了一个**非常重要的**步骤。我也一次只做一次单元更换。如果需要根据范围进行测试,可以修改。 –
'Target.Offset(0,1)'让你到右边的一个单元 - 如果这就是你的意思是“毗邻”这个词。 –