VBA方法';对象范围'_工作表在范围声明中使用的变量失败

VBA方法';对象范围'_工作表在范围声明中使用的变量失败,vba,excel,range,Vba,Excel,Range,我收到以下错误消息:对象的方法范围\u工作表在尝试使用变量作为范围长度在excel中选择范围时失败 下面是我的代码片段: Private Function copyAmount(startRange As Integer, endRange As Integer) Dim startRng As String Dim endRng As String startRng = "A" & Str(startRange) endRng = "A" &

我收到以下错误消息:
对象的方法范围\u工作表在尝试使用变量作为范围长度在excel中选择范围时失败

下面是我的代码片段:

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     

任何帮助都将不胜感激。

使用
Cstr
代替
Str
。这将使你的代码工作,我想

您得到错误是因为您没有完全限定您的范围。此外,无需激活工作簿即可执行复制粘贴:)此外,您也不需要为此使用
功能。使用
Sub

这就是你正在尝试的(未经测试的)吗

编辑


Sub
函数
过程一样,是一个单独的过程,可以获取参数、执行一系列语句并更改其参数的值。但是
Sub
过程不会像
函数那样返回值。

当代码位于工作表而不是模块中时,您会出现此错误。

如果您将
范围(rng)替换为
范围,则不会发生特定错误。选择
rng。选择
(即,它已经是
范围
)假设
rng
已在MS Excel 2010中定义为
范围
变量。
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