用于编辑单元格值的宏

时间:2016-09-13 08:07:32

标签: excel-vba macros vba excel

我写了一个宏来检查一些单元格的输入值。如果输入高于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

问题是当我输入输入时不执行宏,但只有当我再次选择单元格时才会执行。错误在哪里?

2 个答案:

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