Попытка нарушить ссылочную прозрачность в Excel UDF

Я делаю несколько тестов, чтобы понять, что вы можете и не можете делать с макросами Excel. Ситуация такова, что я хочу вызвать следующий UDF из ячейки и дать ему оценку "hotdawg", а также побочный эффект установки ячейки D13 в значение "SIDE EFFECT HERE"

Public Function ranch() As String
    With Workbooks("Book1")
        With Sheets("Sheet1")
            .Cells(13, 4) = "SIDE EFFECT HERE"
        End With
    End With

    ranch = "hotdawg"
End Function

Мне пришлось поместить это в отдельный модуль, чтобы сделать его доступным для использования в формулах. Я бы предпочел запустить его прямо с листа.

Когда я запускаю его с листа, все идет гладко, но я не могу использовать эту функцию в формулах ячеек. Когда я запускаю его из модуля, я получаю ошибку (указанную на листе как "Значение, используемое в формуле, имеет неправильный тип данных"), когда он попадает в строку, которая генерирует побочный эффект:

            .Cells(13, 4) = "SIDE EFFECT HERE"

Я не знаю, радоваться ли тому, что VBA не позволяет UDF нарушать ссылочную прозрачность, или я просто занимаюсь тем, что меняю ячейку из модуля неправильно.

Чтобы свести это к двум альтернативам:

  1. У UDFs не должно быть побочных эффектов? или же
  2. Я пытаюсь установить ячейку (13,4) неправильно? (Если так, что является правильным путем?)

0 ответов

Другие вопросы по тегам