选中工作表组时用单元格引用定义Range函数的问题
解决多工作表组下动态Range选择失败的问题
你的代码在单个工作表正常、选中工作表组时失败的核心原因:
- 读取行号时依赖
Select选中的工作表,当选中多个工作表时,Range("C18")的上下文会出现歧义,导致获取的行号不可靠 - 动态生成的范围字符串在组选择模式下,VBA无法正确解析要应用的范围上下文
修改后的代码(保留你的Select逻辑)
' 先明确从Codes工作表读取行号,不依赖选中状态 Dim Startrow As Long, Lastrow As Long Dim Copyrange As String With Sheets("Codes") Startrow = .Range("C18").Value ' 单元格值为19 Lastrow = .Range("D18").Value ' 单元格值为32 End With Copyrange = "B" & Startrow & ":AA" & Lastrow ' 选中目标工作表组 Sheets(Array("Codes", "Totals", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "NA")).Select ' 此时选择范围即可正常执行 Range(Copyrange).Select
更高效的写法(避免使用Select)
Select操作不仅容易出错,还会拖慢代码运行速度,推荐直接遍历工作表操作:
Dim ws As Worksheet Dim Startrow As Long, Lastrow As Long Dim sourceRange As Range ' 读取行号 With Sheets("Codes") Startrow = .Range("C18").Value Lastrow = .Range("D18").Value ' 定义要复制的源范围 Set sourceRange = .Range("B" & Startrow & ":AA" & Lastrow) End With ' 遍历每个目标工作表,复制范围到对应位置 For Each ws In Sheets(Array("Codes", "Totals", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "NA")) sourceRange.Copy Destination:=ws.Range("B" & Startrow) Next ws
内容的提问来源于stack exchange,提问作者Jose Mendez
相关产品推荐
相关产品推荐

