我有点困惑。我创建了一个带宏的按钮,用于复制实际工作表s
中的另一个工作表s0
中的一组单元格(s
和s0
都是字符串变量)
Sheets(s0).Range("D56:K80").Value = Sheets(s).Range("L2:S26").Value
所有的作品。但是如果我尝试写一些更灵活的东西,比如可以改变起始行的范围
x = Cells(2, 4).Value 'x is a number defined by user
Sheets(s0).Range(Cells(56, 4), Cells(80, 11)).Value = Sheets(s).Range(Cells(2 + x, 2), Cells(26 + x, 9)).Value
无效,1004错误出现。问题是什么? 我做错了什么?
如果我计算出Cells命令的总和,情况就不会改变。 但是像
这样的东西Sheets(s).Cells(r, c) = x
当我使用变量值r和c更改单个单元格的值时,有效。 (x,r和c总是整数)
提前谢谢
答案 0 :(得分:1)
您必须将所有范围引用限定为工作表对象:
Sheets(s0).Range(Sheets(s0).Cells(56, 4), Sheets(s0).Cells(80, 11)).Value = Sheets(s).Range(Sheets(s).Cells(2 + x, 2), Sheets(s).Cells(26 + x, 9)).Value
使用With-End With
语法可以减轻打字负担
With Sheets(s)
Sheets(s0).Range(Sheets(s0).Cells(56, 4), Sheets(s0).Cells(80, 11)).Value = .Range(.Cells(2 + x, 2), .Cells(26 + x, 9)).Value
End With
如果您确定知道 那么" s0"是活动表(即所有非限定工作表引用默认值的表),当宏运行时,您可以省略其限定条件:
With Sheets(s)
Range(Cells(56, 4), Cells(80, 11)).Value = .Range(.Cells(2 + x, 2), .Cells(26 + x, 9)).Value
End With