2017-03-16 109 views
1

我有点困惑。我创建了一个按钮,从另一片s在我实际图纸复制所选单元格的宏s0(包括ss0是字符串变量)使用VBA宏在excel中复制变量范围

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错误的范围。问题是什么? 我在做什么错?

,如果我计算的金额出细胞命令的情况并没有改变。 但像

Sheets(s).Cells(r, c) = x 

的作品时,我改变单个单元格的值与R和C的variabiles值。 (X,R和C总是整数)

预先感谢您

回答

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 
+0

非常感谢您的解释!我还发现另一种解决方案是Sheets(s0).Range(“D56:K80”)。Value = Sheets(s).Range(“B2:I26”)。Offset(x,0).Value'(I found我自己的解决方案总是“在发布这个问题之后”),但是感谢你我明白我的错误。 – marcoresk