Получение объектов Sheets / Worksheets без использования функции volatile - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь создать энергонезависимую функцию, которая принимает индекс и два диапазона и выполняет определенные операции с диапазонами листа.

К сожалению, функции Sheets или Worksheets делают функцию энергозависимой, таким образомкаждый раз, когда я редактирую лист, функция начинает пересчет.

Вот какой-то псевдокод:

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), похоже, ничего не меняет.

Asper title: есть ли способ получить объект Sheets / Worksheets, не делая функцию энергозависимой?

1 Ответ

0 голосов
/ 06 июня 2018

Я не могу воспроизвести ваше замечание о том, что доступ к листу из UDF VBA приводит к тому, что 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

enter image description here

Я вижу только отладочный вывод из этой пользовательской функции при редактировании входных диапазонов A2 и A3: другие правки или вычисления на том же листе не запускают вывод.

Толькокак я вижу, что вы описываете, чтобы добавить Application.Volatile в UDF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...