2012-07-03 168 views
2

我正在以下错误消息使用的变量。VBA方法“对象的范围” _Worksheet失败范围声明

下面是我的代码片段:

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  

任何帮助将不胜感激。

+0

如果更换'和'rng.Select'范围(RNG).Select'(即它已经* *一个'Range')假设'rng'已经被定义为你的特定错误不会发生MS Excel 2010中的'Range'变量。 – ecoe

回答

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 

EDIT

Sub,像Function程序,是可以获取参数,执行一系列语句,以及改变其参数值的独立过程。但是像Function做了Sub过程不返回值。

+0

非常感谢,非常有帮助! – user1155383

0

相反的Str,使用Cstr。这将使你的代码的工作,我猜...

0

当你的代码是在一个工作表,而不是一个模块,您将收到此错误。

相关问题