我在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"),当我尝试执行该功能时停止。
所以:创建范围,函数取一个范围作为输入;不知道为什么这不起作用......
答案 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上更多地工作以了解它的原因。谢谢大家:))