3

我收到以下错误消息:Method range of object _worksheet failed尝试使用变量作为范围长度在 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     

任何帮助将不胜感激。

4

3 回答 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过程不会像 aFunction那样返回值。

于 2012-07-03T09:18:48.307 回答
0

而不是Str,使用Cstr. 我猜这将使您的代码正常工作...

于 2012-07-03T09:16:19.617 回答
0

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

于 2015-11-24T20:45:42.103 回答