Excel VBA技术求助:输入指定值后自动填充同行单元格代码修正
修正后的VBA代码方案
原代码问题分析
- 语法错误:
Set zng Range ("K6:K100")缺少赋值等号,Range ("E6:E100") "NA"缺少赋值运算符(=),且未限定目标行 - 逻辑错误:直接对整个
E6:E100区域赋值,而非仅操作输入"free"的单元格所在行 - 遗漏事件恢复:未重新启用
Application.EnableEvents,会导致后续Excel事件触发失效 - 大小写匹配问题:原代码判断
Target.Value = "Free",无法匹配用户输入的小写"free"
修正后的代码
Private Sub Worksheet_Change(ByVal Target As Range) Dim zng As Range Dim cell As Range ' 定义监控范围:K6到K100 Set zng = Me.Range("K6:K100") ' 检查目标单元格是否在监控范围内 If Not Intersect(Target, zng) Is Nothing Then Application.EnableEvents = False ' 禁用事件防止循环触发 ' 处理批量粘贴的情况,遍历每个受影响的单元格 For Each cell In Intersect(Target, zng) ' 不区分大小写判断是否输入"free" If LCase(cell.Value) = "free" Then ' 对当前单元格所在行的E-H列赋值"NA" Me.Range("E" & cell.Row & ":H" & cell.Row).Value = "NA" End If Next cell Application.EnableEvents = True ' 重新启用事件 End If End Sub
关键修正点说明
- 补充语法缺失的等号与赋值运算符,修正代码编译错误
- 使用
cell.Row获取输入单元格的行号,精准定位该行的E-H列,避免全局赋值 - 添加循环处理
Target为多个单元格的场景(如批量粘贴) - 用
LCase()统一转换为小写判断,兼容"Free"、"FREE"等不同大小写输入 - 最后强制恢复
Application.EnableEvents = True,确保后续Excel功能正常
内容的提问来源于stack exchange,提问作者Vikram Kamath Mundkur
相关产品推荐
相关产品推荐

