【问题标题】:How to return a Boolean value from a Function?如何从函数返回布尔值?
【发布时间】:2020-07-18 22:09:32
【问题描述】:

尝试编写一些错误检查代码。到目前为止,我所有的代码都是一个巨大的子程序。

我在我的工作表中选择单元格 A1,其中单元格内有 Test1。然后我运行 MainProgramCode 宏。

我得到的结果:
函数调用前为假
您从第 1 列中选择了数据
函数调用后为假

我在MsgBox "You selected data from column 1" 之后有OkToProceed = True。但是我在 MainProgramCode 中的 OkToProceed 变量在函数之后仍然是 False?

Function Check_User_Select_Range_Column(OkToProceed As Boolean)
If Selection.Column = 1 Then
    MsgBox "You selected data from column 1"
    OkToProceed = True
Else
    MsgBox "You did not select data from column 1, please try again."
    OkToProceed = False
End If
End Function


Sub MainProgramCode()
Dim OkToProceed As Boolean

'Do some error checking
MsgBox OkToProceed & " Before Function call "
OkToProceed = Check_User_Select_Range_Column(OkToProceed)
MsgBox OkToProceed & " After Function call "

'Proceed with MainProgramCode if user data selection is correct
If OkToProceed = True Then
    MsgBox "MainProgramCode"
Else
    Exit Sub
End If

End Sub

【问题讨论】:

  • 请开始使用“选项显式”。它会强制你声明你的变量并捕获这样的情况。为了解决您的问题,在第一个函数中使用了“Check_User_Select_Range_Column=True”。

标签: excel vba function boolean parameter-passing


【解决方案1】:

由于 Check_User_Select_Range_Column 不返回任何内容, 你应该改变

OkToProceed = Check_User_Select_Range_Column(OkToProceed)

Check_User_Select_Range_Column OkToProceed

但是下面的更好。

Function Check_User_Select_Range_Column()
If Selection.Column = 1 Then
MsgBox "You selected data from column 1"
Check_User_Select_Range_Column = True
Else
MsgBox "You did not select data from column 1, please try again."
Check_User_Select_Range_Column = False
End If
End Function


Sub MainProgramCode()
Dim OkToProceed As Boolean

'Do some error checking
MsgBox OkToProceed & " Before Function call "
OkToProceed = Check_User_Select_Range_Column()
MsgBox OkToProceed & " After Function call "

'Proceed with MainProgramCode if user data selection is correct
If OkToProceed = True Then
MsgBox "MainProgramCode"
Else
Exit Sub
End If

End Sub

【讨论】:

  • 我提交了一个答案以更好地解释为什么他们的代码不起作用。它可能最好结合到您的答案中。如果您同意,请随时将我的答案内容复制到您的答案中。
  • 您应该为函数定义返回数据类型`As Boolean`。否则它将返回一个 Variant
【解决方案2】:

问题的根本原因是您不了解如何从 VBA 函数返回值。要从函数返回一个值,您需要将该值赋给函数的名称。

来自Microsoft Dev Center VBA reference docs

"要从函数返回值,请将值赋给函数 姓名。任意数量的此类分配可以出现在 程序。如果没有为 name 赋值,则该过程返回一个 默认值:数值函数返回 0,字符串函数返回 长度为零的字符串 (""),而 Variant 函数返回 Empty。 "

yamashiro.akihito 的回答演示了正确的用法。

【讨论】:

    猜你喜欢
    • 2013-03-11
    • 2021-02-16
    • 1970-01-01
    • 2017-06-07
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    相关资源
    最近更新 更多