使用.End(xlRight)复制数据触发运行时错误,换xlUp正常,求原因
代码运行错误原因解析
xlRight触发报错的原因
你的代码中,Existing是在C列定位到的匹配单元格(例如C2)。执行.End(xlRight)时:
- 若该单元格右侧所有单元格均为空,
End(xlRight)会直接跳至当前行的最后一列(Excel最大列为XFD列)。 - 后续
.Offset(0,1)试图访问超出Excel列范围的位置,直接触发运行时错误(通常是1004类的范围越界错误)。
xlUp能正常运行的原因
换成.End(xlUp)时:
- 即便
Existing所在行上方全为空,.End(xlUp)最多定位到当前列的第1行(例如C1)。 - 后续
.Offset(0,1)指向的D1属于Excel有效单元格范围,因此宏能执行完成,只是复制位置不符合需求。
修复方案(实现目标需求)
如果要在首次出现数据的右侧第一个空单元格复制标识符,可替换复制环节的代码:
' 找该行最右侧的非空单元格,再往右偏移1格 OwnerName.Offset(0, -5).Copy Destination:=Worksheets(OwnerName.Value).Cells(Existing.Row, Columns.Count).End(xlToLeft).Offset(0, 1)
或者更稳妥的逐格查找方式:
Dim targetCell As Range Set targetCell = Existing.Offset(0, 1) ' 循环找到第一个空单元格 Do While targetCell.Value <> "" Set targetCell = targetCell.Offset(0, 1) Loop OwnerName.Offset(0, -5).Copy Destination:=targetCell
内容的提问来源于stack exchange,提问作者user27758886
相关产品推荐
相关产品推荐

