VBA方法'对象范围'_Worksheet在范围声明中使用的失败变量

时间:2012-07-03 09:01:01

标签: excel vba excel-vba range

我在尝试使用变量作为范围长度选择excel中的范围时收到以下错误消息:Method range of object _worksheet failed

以下是我的代码片段:

Private Function copyAmount(startRange As Integer, endRange As Integer)
    Dim startRng As String
    Dim endRng As String

    startRng = "A" & Str(startRange)
    endRng = "A" & Str(endRange)

    activateBook ("book2.xlsm")
    Set rng = Range(startRng, endRng)
    Workbooks("book2.xlsm").Sheets(1).Range(rng).Select
    Selection.Copy
    activateBook ("Book1.xlsm")
    Range("D3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, _
    Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Function     

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:7)

您收到错误是因为您未完全符合范围。此外,没有必要激活工作簿来执行复制粘贴:)此外,您不需要Function。使用Sub

这是你正在尝试的( UNTESTED )?

Private Sub copyAmount(startRange As Integer, endRange As Integer)
    Dim wbT As Workbook, wbO As Workbook
    Dim rng As Range

    Set wbT = ThisWorkbook
    Set wbO = Workbooks("book2.xlsm")

    Set rng = wbO.Sheets(1).Range("A" & startRange & ":" & "A" & endRange)
    rng.Copy

    '~~> Change Sheets(1) below to the relevant sheet
    wbT.Sheets(1).Range("D3").PasteSpecial Paste:=xlPasteValues, _
    Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub

修改

SubFunction过程一样,是一个单独的过程,可以接受参数,执行一系列语句,并更改其参数的值。但是,Sub过程不会返回类似Function的值。

答案 1 :(得分:0)

而不是Str,请使用Cstr。这将使你的代码工作我猜...

答案 2 :(得分:0)

当代码在工作表而不是模块中时,您将收到此错误。