将sub中定义的变量传递给函数VBA

时间:2015-03-12 19:58:59

标签: excel excel-vba vba

我正在尝试使用sub来确定一个动态范围,该范围用作许多函数的输入。我试图做的最简单的版本看起来像这样

这种方法给了我错误。将子和函数放在不同的模块中没有帮助。我犯的错误是什么?

Global Info As Range

Sub InfoSetter()
    Worksheets("Example").Activate
    ActiveSheet.UsedRange.Select
    Set Info = Selection

End Sub

Function Test() As Variant

    Test = Info.Address

End Function

2 个答案:

答案 0 :(得分:0)

尝试以下方法。这会从设置info值的函数中调用sub。这意味着当函数计算时,info将始终为当前UsedRange。此外,使用.Activate.Select通常被视为不良做法。以下代码不使用任何一个相同的代码。

Global Info As Range

Sub InfoSetter()
    Set Info = Worksheets("Example").UsedRange
End Sub

Function Test() As Variant
    Application.Volatile 'Added so function updates automatically when sheet calculates
    Call InfoSetter
    Test = Info.Address

End Function

编辑:在函数开头添加Application.Volatile将使每次工作表计算时更新。

答案 1 :(得分:0)

根据omegastripes的评论,您的错误很可能是因为您的范围是空的。鉴于Test变体建议您测试空范围,如下所示

Global Info As Range

Sub TryMe()
MsgBox Test
End Sub

您的代码

Sub InfoSetter()
    Set Info = Worksheets("Example").UsedRange
End Sub

Function Test() As Variant
If Info Is Nothing Then
    Test = "Ï'm empty"
Else
    Test = Info.Address
End If
End Function
相关问题