带条件判断的跨工作表区域复制循环代码修正求助
修正VBA跨工作表区域赋值的代码问题
你的代码问题出在Range地址的字符串拼接语法错误,Range("B" & i:"O" & i)的写法不符合VBA语法规范,正确的写法需要用&把行号和列区间的字符串完整拼接起来。
修正后的完整代码
Sub dav() Dim i As Integer ' 建议声明变量类型,养成良好编码习惯 For i = 1 To 10 If Sheets("yan").Range("A" & i).Value = Sheets("fev").Range("A" & i).Value Then ' 修正Range地址的拼接方式:添加&连接符 Sheets("yan").Range("B" & i & ":O" & i).Value = Sheets("fev").Range("C" & i & ":P" & i).Value End If Next i End Sub
关键修正点说明
- 错误写法:
Range("B" & i:"O" & i)→ 这里的i:"O"部分没有用&连接,VBA无法识别正确的单元格地址 - 正确写法:
Range("B" & i & ":O" & i)→ 通过&把"B"、行号i、":O"、行号i拼接成完整的单元格区域字符串(比如i=1时就是"B1:O1")
给VBA新手的优化建议
可以用对象定义简化重复的工作表引用,让代码更简洁易读:
Sub dav_optimized() Dim i As Integer Dim wsYan As Worksheet, wsFev As Worksheet ' 提前定义工作表对象,避免重复查找 Set wsYan = ThisWorkbook.Sheets("yan") Set wsFev = ThisWorkbook.Sheets("fev") For i = 1 To 10 If wsYan.Range("A" & i).Value = wsFev.Range("A" & i).Value Then wsYan.Range("B" & i & ":O" & i).Value = wsFev.Range("C" & i & ":P" & i).Value End If Next i ' 释放对象变量 Set wsYan = Nothing Set wsFev = Nothing End Sub
内容的提问来源于stack exchange,提问作者Mamed Aliyev
相关产品推荐
相关产品推荐

