我写了一个宏来检查一些单元格的输入值。如果输入高于8,则将过量写入另一个单元,输入变为8,而如果输入低于8,则将缺失的数量写入第三个单元。 这是我写的代码
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
TA = Target.Address: R = Target.Row: C = Target.Column
If C = 2 Or C = 7 Then
If (R < 19 And R > 11) Or (R < 33 And R > 25) Then
Hours = Cells(R, C).Value
If Hours <> 0 Then
If Hours > 8 Then
Cells(R, C) = 8
Cells(R, C + 1) = Hours - 8
End If
If Hours < 8 Then
Cells(R, C + 2) = 8 - Hours
End If
End If
End If
End If
End Sub
问题是当我输入输入时不执行宏,但只有当我再次选择单元格时才会执行。错误在哪里?
答案 0 :(得分:1)
您的函数Worksheet_SelectionChange
仅在更改所选单元格时触发。您应该使用Worksheet_Change
代替。您可以查看此automatically execute an Excel macro on a cell change了解更多详情。
答案 1 :(得分:1)
首先将触发事件从 Worksheet_SelectionChange 更改为 Worksheet_Change 。
其次,您可以优化代码,因为您可以阅读Column
的{{1}}和Row
属性,您可以在代码中保存几行。
第三,我修改了检查行的测试条件,通过切换到Target
,您现在可以轻松地向此条件添加更多行。
使用Select Case
将结果插入相邻单元格中。
我添加了Target.offset
,因此在您更改此值后,它不会再运行一次。
如果需要,您也可以删除不需要的Exit Sub
(除非您有一个以某种方式读取此值的全局变量)。
您可以使用Hours
等。)
If Target.Value <> 0 Then