我在尝试使用变量作为范围长度选择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
非常感谢任何帮助。
答案 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
修改强>
Sub
与Function
过程一样,是一个单独的过程,可以接受参数,执行一系列语句,并更改其参数的值。但是,Sub
过程不会返回类似Function
的值。
答案 1 :(得分:0)
而不是Str
,请使用Cstr
。这将使你的代码工作我猜...
答案 2 :(得分:0)
当代码在工作表而不是模块中时,您将收到此错误。