Excel 将VBA变量设置为字符串函数的结果

Excel 将VBA变量设置为字符串函数的结果,excel,vba,function,Excel,Vba,Function,我今天读了很多关于函数的书,它们似乎都是关于数学/数字的。我试图使用一个函数,它返回一个字符串,并将其作为一个变量捕获到main sub中,但我无法让它工作。有人能指出我做错了什么吗 例如: 功能: 分: 您没有从函数返回值。此外,函数应仅用于返回值,而不用于执行更改变量或显示弹出窗口以外的内容的操作。它也会混淆全局变量和将变量传递给函数。通常将局部变量传递给函数。以下是一个更清晰的示例,首先是主函数,这是正常惯例: Sub Testing() Dim Z As String Z

我今天读了很多关于函数的书,它们似乎都是关于数学/数字的。我试图使用一个函数,它返回一个字符串,并将其作为一个变量捕获到main sub中,但我无法让它工作。有人能指出我做错了什么吗

例如:

功能:

分:


您没有从函数返回值。此外,函数应仅用于返回值,而不用于执行更改变量或显示弹出窗口以外的内容的操作。它也会混淆全局变量和将变量传递给函数。通常将局部变量传递给函数。以下是一个更清晰的示例,首先是主函数,这是正常惯例:

Sub Testing()
    Dim Z As String
    Z = Test("Hello")
    MsgBox Z
    MsgBox Test("Hello")
End Sub

Public Function Test(ByRef var As String) As String
    Test = var & "World"
End Function

您没有从函数返回值。此外,函数应仅用于返回值,而不用于执行更改变量或显示弹出窗口以外的内容的操作。它也会混淆全局变量和将变量传递给函数。通常将局部变量传递给函数。以下是一个更清晰的示例,首先是主函数,这是正常惯例:

Sub Testing()
    Dim Z As String
    Z = Test("Hello")
    MsgBox Z
    MsgBox Test("Hello")
End Sub

Public Function Test(ByRef var As String) As String
    Test = var & "World"
End Function

如果希望函数返回一个值,请填充函数变量并在main sub中返回该值,如下所示

Public Function Test(var As String) As String
    Test = var & " World"
End Function

Sub testing()
    returnstr  = Test("Hello")
    MsgBox returnstr
End Sub

如果希望函数返回一个值,请填充函数变量并在main sub中返回该值,如下所示

Public Function Test(var As String) As String
    Test = var & " World"
End Function

Sub testing()
    returnstr  = Test("Hello")
    MsgBox returnstr
End Sub

我使用MsgBox只是为了调试,但是我开始看到我的逻辑错误了,谢谢!不客气。如果答案充分回答了您的问题,请使用左边的勾号将其标记为正确。否则,如果你想知道更多细节,你可以留下评论。@TimStack,我接受99%的问题的答案,只是明天才开始测试和验证。我倾向于出错,因为他使用了一个全局变量,但您的代码也很容易阅读,并帮助我理解我的问题。谢谢大家,我很少在好答案之间做出如此艰难的决定!错误使用函数修改全局变量,但仍然没有从函数返回值。函数不是这样使用的。函数用于返回值。如果您只想修改一个全局变量,那么只需使用Sub。函数绝对可以修改变量,包括通过引用传递的变量和全局变量,但如果它不返回值,那么您只需使用Sub。我使用MsgBox仅用于调试,但我开始看到我的逻辑错误,谢谢!不客气。如果答案充分回答了您的问题,请使用左边的勾号将其标记为正确。否则,如果你想知道更多细节,你可以留下评论。@TimStack,我接受99%的问题的答案,只是明天才开始测试和验证。我倾向于出错,因为他使用了一个全局变量,但您的代码也很容易阅读,并帮助我理解我的问题。谢谢大家,我很少在好答案之间做出如此艰难的决定!错误使用函数修改全局变量,但仍然没有从函数返回值。函数不是这样使用的。函数用于返回值。如果您只想修改一个全局变量,那么只需使用Sub。函数绝对可以修改变量,包括通过引用传递的变量和全局变量,但如果它不返回值,那么您只需使用Sub。