在不使函数易变的情况下检索 Sheets/Worksheets objects
Retrieving Sheets/Worksheets objects without making the function volatile
我正在尝试制作一个非易失性函数,它接受一个索引和两个范围,并对 sheet 的范围进行某些操作。
不幸的是,Sheets
或 Worksheets
函数使函数不稳定,因此每次我编辑作品时sheet 函数都会开始重新计算。
这是一些伪代码:
Function FooFunc(sheetIndex As Integer, xRange As Variant, yRange As Variant) As Variant
Dim operatingSheet As Variant
'This makes the function volatile
Set operatingSheet = Sheets("Bar " & sheetIndex)
[...]
End Function
显然声明 Application.Volatile (False)
似乎没有任何改变。
根据标题:有没有办法在不使函数变易变的情况下检索 Sheets/Worksheets object?
我无法重现您的观察结果,即从 VBA UDF 访问作品sheet 会导致该 UDF 不稳定(Excel 2013)。
简单的 UDF:
Function Tester(num, rng As Range)
Dim ws As Worksheet, rv
Set ws = ThisWorkbook.Sheets(num)
rv = num & ":" & rng.Value & ":" & ws.Name
Debug.Print rv
Tester = rv
End Function
我只在编辑输入范围 A2 和 A3 时看到此 UDF 的调试输出:对同一 sheet 的其他编辑或计算不会触发输出。
我能看到你描述的唯一方法是将 Application.Volatile
添加到 UDF。
我正在尝试制作一个非易失性函数,它接受一个索引和两个范围,并对 sheet 的范围进行某些操作。
不幸的是,Sheets
或 Worksheets
函数使函数不稳定,因此每次我编辑作品时sheet 函数都会开始重新计算。
这是一些伪代码:
Function FooFunc(sheetIndex As Integer, xRange As Variant, yRange As Variant) As Variant
Dim operatingSheet As Variant
'This makes the function volatile
Set operatingSheet = Sheets("Bar " & sheetIndex)
[...]
End Function
显然声明 Application.Volatile (False)
似乎没有任何改变。
根据标题:有没有办法在不使函数变易变的情况下检索 Sheets/Worksheets object?
我无法重现您的观察结果,即从 VBA UDF 访问作品sheet 会导致该 UDF 不稳定(Excel 2013)。
简单的 UDF:
Function Tester(num, rng As Range)
Dim ws As Worksheet, rv
Set ws = ThisWorkbook.Sheets(num)
rv = num & ":" & rng.Value & ":" & ws.Name
Debug.Print rv
Tester = rv
End Function
我只在编辑输入范围 A2 和 A3 时看到此 UDF 的调试输出:对同一 sheet 的其他编辑或计算不会触发输出。
我能看到你描述的唯一方法是将 Application.Volatile
添加到 UDF。