将一个在sub中定义的variables传递给一个函数VBA

我试图使用一个子来确定一个dynamic范围,作为一些function的input。 我试图做的最简单的版本是这样的

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

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 

试试下面。 这将从设置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在你的函数的开始将使它每次工作表计算时更新。

根据omegastripes的评论,你的错误可能是因为你的范围是空的。 鉴于Test是一个变种build议你testing一个空的范围如下

 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