Excel VBA 可变行范围粘贴出现调试错误求助
问题分析与解决
错误原因
代码里复制粘贴行的Cells(cr, 2)和Cells(cr, 20)没指定父工作表对象,默认会指向当前活动工作表,而非目标的Data工作表。如果此时活动工作表不是Data,就会导致引用区域跨表,触发调试错误。
修正后的代码
Dim lr As Long, cr As Long ' 用Long代替Integer,避免行数超出Integer范围 Dim r As Range lr = wb_main.Worksheets("Data").Range("A" & Rows.Count).End(xlUp).Row cr = lr + 1 Set r = wb_main.Worksheets("Data").Range("A" & lr) r.Offset(1).Value = r.Value + 1 ' 给Cells指定父工作表,确保引用的是Data表的单元格 wb_main.Worksheets("Main").Range("E3:W3").Copy _ wb_main.Worksheets("Data").Range(wb_main.Worksheets("Data").Cells(cr, 2), wb_main.Worksheets("Data").Cells(cr, 20)) ' 删除时指定Shift方向,避免默认行为可能的问题 wb_main.Worksheets("Main").Range("E3:W3").Delete Shift:=xlToLeft
额外优化建议
- 用
Long类型存储行号:Excel工作表行数远超Integer的最大值(32767),使用Long可避免溢出错误。 - 直接赋值代替复制粘贴:如果仅需复制数值,无需格式,直接赋值效率更高,示例:
wb_main.Worksheets("Data").Range("B" & cr & ":T" & cr).Value = wb_main.Worksheets("Main").Range("E3:W3").Value
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

