Excel:Visual Basic:作为函数输入的范围不起作用

时间:2014-09-28 16:10:49

标签: excel vba range

我在Excel中用VB开始;到目前为止,我无法想象以下内容; 我有以下功能:

Function testGetRange(myRange As Range)
    Dim weekStart As Integer
    Dim weekEnd As Integer

    weekStart = myRange(1).Value
    weekEnd = myRange(2).Value
End Function

如果我尝试执行它:

Sub CreationRapport()
    Dim testRange1 As Range
    Set testRange1 = Range("A5:B5")

    testGetRange (testRange1)
End Sub

我有一个错误,例如"需要对象" (抱歉,错误信息是法语:" objet requis"),当我尝试执行该功能时停止。

所以:创建范围,函数取一个范围作为输入;不知道为什么这不起作用......

3 个答案:

答案 0 :(得分:2)

您正在调用函数,而parantheses表示您希望函数返回一些内容:

testGetRange (testRange1)

但是你的功能并没有返回任何东西。您可以通过将此添加到testGetRange来解决此问题:

testGetRange ="My return output"

...而且你不能把输出放在任何地方。您可以通过更改CreationRapport来修复此问题:

MyOutput = testGetRange (testRange1)
msgbox MyOutput

答案 1 :(得分:1)

当您调用函数但不想要返回值时,您需要不使用括号

Sub CreationRapport()
    Dim testRange1 As Range
    Set testRange1 = Range("A5:B5")

    testGetRange testRange1
End Sub

或使用电话

Sub CreationRapport()
    Dim testRange1 As Range
    Set testRange1 = Range("A5:B5")

    Call testGetRange (testRange1)
End Sub

为什么你可以看到VBA如何处理将控制转移到子或函数here on MSDN

  

调用过程时不需要使用Call关键字。   但是,如果使用Call关键字来调用需要的过程   参数,参数列表必须括在括号中。如果你使用   要么调用语法来调用任何内部函数或用户定义的函数,   函数的返回值被丢弃。

答案 2 :(得分:0)

好的,所以在测试了不同的答案后,这很有效:

Function testGetRange(myRange As Range) As String
    Dim weekStart As String
    Dim weekEnd As String

    weekStart = myRange(1)
    weekEnd = myRange(2)

    testGetRange = weekStart
End Function

在Sub:

Sub CreationRapport()
    Dim myOutput As String
    Dim testRange1 As Range
    Set testRange1 = Range("A5:B5")

    myOutput = testGetRange(testRange1)
    MsgBox myOutput
End Sub

MsgBox不是必需的,但部分myOutput = testGetRange(testRange1)是! 因此,正如Doug所建议的那样,需要在VB上更多地工作以了解它的原因。谢谢大家:))