【问题标题】:Copy a variable range in excel with VBA macro使用VBA宏在excel中复制变量范围
【发布时间】:2017-03-16 07:24:17
【问题描述】:

我有点困惑。我创建了一个带有宏的按钮,该宏在我的实际工作表s0 中复制另一个工作表s 中的单元格选择(ss0 都是字符串变量)

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 总是整数)

提前谢谢你

【问题讨论】:

    标签: vba excel


    【解决方案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
    

    【讨论】:

    • 非常感谢您的解释!我还找到了Sheets(s0).Range("D56:K80").Value = Sheets(s).Range("B2:I26").Offset(x, 0).Value 的替代解决方案(我总是在“发布问题后”自己找到解决方案!)但多亏了你,我理解了我的错误。
    猜你喜欢
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多