【发布时间】:2011-06-01 00:40:59
【问题描述】:
我是 VBA 新手,当我看到错误时想从函数返回。不能这样做。有什么指点吗?
Function GetEditboxValue(control As IRibbonControl, text As String) As String
If Not IsMissing(text) Then
If Not IsNumeric(text) Then
MsgBox "Please enter numeric value only."
' I WANT TO RETURN HERE
End If
End If
If control.id = "xyz" Then
spaceAboveTable = text
End If
End Function
【问题讨论】:
-
您确实意识到您的函数没有返回值,对吧?在 VBA 中,不返回值的函数应声明为
Sub。否则,您需要在退出函数之前为GetEditboxValue分配一个值。 (显然,这是在您不想提前退出 而不 返回值的情况。) -
别忘了,这个函数看起来很丑。它没有从编辑框(顾名思义)返回一个值,它似乎做的唯一一件事就是产生一些令人讨厌的副作用 - 迟早会给您带来维护方面的麻烦。它没有将错误检测与错误处理分开,而是使用 MsgBox 自己处理错误。最好将这些问题分开,如果文本不是数字,返回错误值或引发错误事件或类似的东西,但让调用者决定是否要显示消息框或进行一些不同的错误处理。
-
@Cody,为了澄清您对@ydobonmai 的评论,所有声明为函数的例程都将返回一个值。如果您没有使用像 'GetEditboxValue =
' 这样的行准确指定 what 值,那么您的函数将返回函数类型的默认值。在这种情况下,它是空字符串,但它可以是 0、""、False、Empty、Nothing 等。 -
@Doc,我同意。我是 VBA 新手,这是我写得很快的东西,只是不知道 EXIT FUNCTION。该功能甚至不完整。我只是碰壁并在这里问。感谢您宝贵的时间和宝贵的时间。
标签: vba error-handling return return-value