Excel:Visual Basic:范围作为函数input不起作用

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

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”),当我尝试执行该function时停下来。

所以:创build范围,函数以范围作为input; 不知道为什么这是行不通的…

你正在调用一个函数,并且这些调整意味着你想要这个函数返回一些东西:

 testGetRange (testRange1) 

但是你的函数不会返回任何东西。 你可以通过添加到testGetRange来解决这个问题:

 testGetRange ="My return output" 

…而且你不把输出放在任何地方。 您可以通过更改CreationRapport来解决这个问题:

 MyOutput = testGetRange (testRange1) msgbox MyOutput 

当你调用一个函数但不想返回值的时候,你需要把括号忽略掉

 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如何在MSDN上把控制转移到子或函数

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

好的,所以在testing不同的答案后,这个工作:

 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所build议的那样,需要在VB上多做些工作,看看这是为什么。 谢谢你们 :)