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上多做些工作,看看这是为什么。 谢谢你们 :)