VBA For循环编译错误排查及行匹配字符自动赋值功能求助
VBA报错原因与修复方案
1. 编译错误的直接原因
你第3行报错是两个问题叠加:
ThisWorkbook是工作簿对象,没有直接的Range成员,Range是工作表对象的属性,必须指定具体工作表才能调用- 语法逻辑错误:
Cells(Rows.Count, "A").End(xlUp).Row返回的是最后一行的行号(数字类型),不能作为参数直接传给Range方法,你本来就是要拿这个行号给lLastRow赋值,完全不需要套ThisWorkbook.Range()
错误行直接替换成你现有代码里正确的写法即可:
lLastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
建议把ActiveSheet换成具体工作表名比如Sheet1,避免切换工作表导致逻辑异常。
2. 完整修复+新增需求实现代码
你要的匹配A列内容给指定列赋值的逻辑,可以直接整合到现有循环里,下面是改好的完整代码,注释里标了自定义修改的位置:
Sub 完整功能宏() ' 第一步:删除B列(原有逻辑) Range("B:B").Delete Dim lRow As Long Dim lLastRow As Long ' 修复报错行,指定工作表取A列最后一行行号 lLastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row ' 第二步:倒序遍历插入行(原有逻辑) For lRow = lLastRow To 19 Step -1 If ActiveSheet.Cells(lRow, "A").Font.Bold = True Then ActiveSheet.Cells(lRow, "A").EntireRow.Insert End If Next lRow ' 原有插入描述符逻辑 Rows("19:19").Insert Shift:=xlDown Range("B20").FormulaR1C1 = "Configuration Name" Range("C20").FormulaR1C1 = "=R[1]C[-1]" ' 第三步:新增匹配赋值逻辑 ' 重新获取插入行后的最后一行行号 lLastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row For lRow = 19 To lLastRow With ActiveSheet.Cells(lRow, "A") ' 匹配规则1:包含CON时,向右偏移8列(即I列)赋值为22,可自定义 If .Value Like "*CON*" Then .Offset(0, 8).Value = 22 ' 匹配规则2:包含apple时,向右偏移2列(即C列)赋值为orange,可自定义 ElseIf .Value Like "*apple*" Then .Offset(0, 2).Value = "orange" ' 其他情况默认赋值17 Else .Offset(0, 2).Value = "17" End If End With Next lRow End Sub
3. 自定义修改说明
- 调整匹配关键词:修改
Like "*关键词*"里的内容即可,*是通配符,代表任意长度任意字符 - 调整目标列:修改
Offset(0, 列偏移量)的第二个参数:0代表同一行,正数向右偏移,负数向左偏移,比如要赋值到D列就填3 - 新增匹配规则直接加
ElseIf分支即可,顺序越靠前的规则优先级越高
内容的提问来源于stack exchange,提问作者Aaron Meyer
相关产品推荐
相关产品推荐

