VBA搜索两个不同范围赋值时提示_Worksheet对象Range方法失败如何解决
报错根因
你遇到的Method 'Range' of object'_Worksheet' failed报错,100%出现在你标记的这行代码:
Sheet2.Range(k & j).Value = Sheet4.Range("b" & i).Value
核心错误点:
- 你声明的
k是Range对象,不是列名字符串。当你直接执行k & j拼接时,VBA会默认读取k单元格的内容值来和行号j拼接,而非取k所在的列标,只要k的内容不是合法的Excel列标识(比如A、B、AA这类),调用Range方法就会直接触发报错。 - 即使k的内容刚好是列标,这种写法逻辑也是错的,你的需求是取k所在的列、j所在行的单元格,而不是用k的值当列标。
修复方案
直接把报错行替换为用Cells属性写的代码即可,Cells(行号, 列号)的写法不需要拼接列标字符串,稳定性更高:
' 替换原报错行即可 Sheet2.Cells(j, k.Column).Value = Sheet4.Range("b" & i).Value
如果一定要用Range写法,也可以改写成如下形式:
Sheet2.Range(k.EntireColumn.Cells(j).Address).Value = Sheet4.Range("b" & i).Value
可选优化建议
- 你当前的三层循环嵌套在数据量大的时候执行效率很低,可以在循环开头加
Application.ScreenUpdating = False,所有循环结束后加Application.ScreenUpdating = True关闭屏幕刷新提升速度。 - 可以用
Range.Find方法代替逐行匹配,代码更简洁,执行效率也会高很多。
内容的提问来源于stack exchange,提问作者Byron
相关产品推荐
相关产品推荐

