将.Range作为参数VBA传递

时间:2015-08-19 11:22:54

标签: excel vba function

嗨请帮我解决下面的问题,

Sub movedata()

    Call select_data(.Range("B6:B12"))


End Sub


Function select_data(C As Range)

    Worksheets("sheet1").Range("I6:I16") = Worksheets("Sheet1").Range(C).Value

End Function

我看不出我错在哪里,

谢谢,

2 个答案:

答案 0 :(得分:1)

C已经是Range对象,因此无需将其传递给Range()函数(无论如何都需要字符串)来创建它。

变化:

Worksheets("sheet1").Range("I6:I16") = Worksheets("Sheet1").Range(C).Value

要:

Worksheets("sheet1").Range("I6:I16") = C

答案 1 :(得分:0)

您将范围混淆为Range object及其Address property

方法1:

Sub movedata()
    Call select_data(Range("B6:B12").address)
End Sub

Function select_data(C As string)
    with Worksheets("sheet1")
        .Range("I6:I16") = .Range(C).Value
    end with
End Function

方法2:

Sub movedata()
    Call select_data(Worksheets("sheet1").Range("B6:B12"))
End Sub

Function select_data(C As range)
    C.parent.Range("I6").resize(C.rows.count, C.columns.count) = C.Value
End Function
不过,将B6:B12的值填入I6:I16的细胞会有一些困难。似乎有4个缺失值。