在不使函数易变的情况下检索 Sheets/Worksheets objects

Retrieving Sheets/Worksheets objects without making the function volatile

我正在尝试制作一个非易失性函数,它接受一个索引和两个范围,并对 sheet 的范围进行某些操作。

不幸的是,SheetsWorksheets 函数使函数不稳定,因此每次我编辑作品时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。