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

3
我收到以下错误信息:对象_worksheet的range方法失败,在使用变量作为范围长度选择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     

任何帮助都将不胜感激。


如果您在MS Excel 2010中将Range(rng).Select替换为rng.Select(即它已经是一个“Range”),假设rng已被定义为Range变量,则不会发生特定的错误。 - ecoe
3个回答

7
你之所以出错,是因为你没有完全限定范围。而且在进行复制粘贴时激活工作簿不是必要的 :) 此外,你不需要使用 Function,可以使用 Sub

代码

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过程那样返回值。


0

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


0

使用Cstr代替Str。这样做应该可以让你的代码正常工作...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接