Попытка нарушить ссылочную прозрачность в 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 нарушать ссылочную прозрачность, или я просто занимаюсь тем, что меняю ячейку из модуля неправильно.
Чтобы свести это к двум альтернативам:
- У UDFs не должно быть побочных эффектов? или же
- Я пытаюсь установить ячейку (13,4) неправильно? (Если так, что является правильным путем?)