Excel 在单元格中输入值后编辑单元格的触发代码
我编写了一个宏来检查某些单元格中输入的值 如果输入值高于8,则多余值将写入另一个单元格,并将输入值更改为8。如果输入值小于8,则缺失的量将写入第三个单元格Excel 在单元格中输入值后编辑单元格的触发代码,excel,vba,events,Excel,Vba,Events,我编写了一个宏来检查某些单元格中输入的值 如果输入值高于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
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
Private子工作表\u selection更改(ByVal目标作为范围)
TA=目标。地址:R=目标。行:C=目标。列
如果C=2或C=7,则
如果(R<19和R>11)或(R<33和R>25),则
小时=单元格(R,C).值
如果是0小时,那么
如果小时数>8,则
单元(R,C)=8
电池(R,C+1)=小时-8
如果结束
如果小时数小于8,则
电池(R,C+2)=8小时
如果结束
如果结束
如果结束
如果结束
端接头
问题是,当我输入输入时,宏不会执行,只有当我再次选择单元格时才会执行。您的函数
工作表\u SelectionChange
仅当所选单元格发生更改时才会触发。您应该改用工作表\u Change
。有关更多详细信息,请参见此部分。您的函数工作表\u selection change
仅在所选单元格更改时触发。您应该改用工作表\u Change
。有关详细信息,请参见此图。首先将触发事件从工作表\u选择更改更改为工作表\u更改
其次,您可以优化代码,因为您可以读取目标
的列
和行
属性,所以您可以在代码中保存几行
第三,我修改了检查行的测试条件,通过切换到selectcase
,您现在可以轻松地向该条件添加更多行
使用Target.offset
将结果插入相邻单元格
我添加了Exit Sub
,因此在您更改此处的值后,它不会额外运行一段时间
如果需要,还可以删除Hours
,因为不需要它(除非您有一个全局变量以某种方式读取此值)
如果目标值为0,则可以使用等)
Private子工作表\u更改(ByVal目标作为范围)
'检查目标是否在B列或G列中
如果Target.Column=2或Target.Column=7,则
选择案例目标。行
案例12至18,26至32'检查目标行是否为12至18(包括)ir介于26至32(包括)之间
小时=目标值
如果是0小时,那么
如果小时数>8,则
目标值=8
目标偏移量(0,1)。值=小时-8
出口接头
其他的
如果小时数小于8,则
Target.Offset(0,2).Value=8小时
如果结束
出口接头
如果结束
如果结束
结束选择
如果结束
端接头
首先将触发事件从工作表选择更改更改为工作表更改
其次,您可以优化代码,因为您可以读取目标
的列
和行
属性,所以您可以在代码中保存几行
第三,我修改了检查行的测试条件,通过切换到selectcase
,您现在可以轻松地向该条件添加更多行
使用Target.offset
将结果插入相邻单元格
我添加了Exit Sub
,因此在您更改此处的值后,它不会额外运行一段时间
如果需要,还可以删除Hours
,因为不需要它(除非您有一个全局变量以某种方式读取此值)
如果目标值为0,则可以使用等)
Private子工作表\u更改(ByVal目标作为范围)
'检查目标是否在B列或G列中
如果Target.Column=2或Target.Column=7,则
选择案例目标。行
案例12至18,26至32'检查目标行是否为12至18(包括)ir介于26至32(包括)之间
小时=目标值
如果是0小时,那么
如果小时数>8,则
目标值=8
目标偏移量(0,1)。值=小时-8
出口接头
其他的
如果小时数小于8,则
Target.Offset(0,2).Value=8小时
如果结束
出口接头
如果结束
如果结束
结束选择
如果结束
端接头
Private Sub Worksheet_Change(ByVal Target As Range)
' check if target is in Column B or Column G
If Target.Column = 2 Or Target.Column = 7 Then
Select Case Target.Row
Case 12 To 18, 26 To 32 ' check if target row is 12 to 18 (including) ir between 26 to 32 (including)
Hours = Target.Value
If Hours <> 0 Then
If Hours > 8 Then
Target.Value = 8
Target.Offset(0, 1).Value = Hours - 8
Exit Sub
Else
If Hours < 8 Then
Target.Offset(0, 2).Value = 8 - Hours
End If
Exit Sub
End If
End If
End Select
End If
End Sub