VBA中如何将Target Address应用于多行实现单元格联动赋值
调整后可适配B4-B10行的代码
Private Sub Worksheet_Change(ByVal Target As Range) Dim rowNum As Long ' 过滤非目标范围的修改操作 If Target.Count <> 1 Then Exit Sub If Intersect(Target, Me.Range("B4:B10")) Is Nothing Then Exit Sub ' 提取当前修改单元格的行号 rowNum = Target.Row ' 关闭事件触发,防止修改单元格时递归触发本事件 Application.EnableEvents = False Select Case Target.Value Case "AA1" Me.Range("C" & rowNum).Value = "Please Select" Me.Range("D" & rowNum).Value = "Please Select" Case "BB1", "CC1", "DD1", "EE" Me.Range("C" & rowNum).Value = "Please Select" Me.Range("D" & rowNum).Value = " " Case "" Me.Range("F" & rowNum).Value = "" Me.Range("D" & rowNum).Value = " " End Select ' 恢复事件触发 Application.EnableEvents = True End Sub
调整说明
- 新增触发范围校验:通过
Intersect方法判断修改的单元格是否属于B4-B10区间,同时限制仅单个单元格修改时生效,避免批量操作报错。 - 动态行号适配:通过
Target.Row获取当前修改单元格的行号,所有同行C、D、F列的操作都绑定该行号,实现修改任意B4-B10单元格时自动操作对应行的其他单元格。 - 优化分支逻辑:将原有重复的多分支
ElseIf判断合并为Select Case结构,相同逻辑的条件合并书写,后续调整规则时更易维护。 - 新增事件开关:修改单元格前关闭事件触发,避免修改C/D/F列时再次触发本事件导致死循环,修改完成后恢复事件开关不影响其他功能。
内容的提问来源于stack exchange,提问作者log_anupam
相关产品推荐
相关产品推荐

