我正在尝试使用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
答案 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