Я вызываю функцию VBA из листа Excel. При изменении ячейки внутри кода функции VBA, Excel пытается повторно выполнить эту функцию снова (и снова во второй итерации и ...)Как предотвратить функцию VBA от повторного выполнения внутри кода
Пример: если у вас есть код:
Function test() As Variant
Range("A1") = 1
test = "test"
End Function
Когда вы используете "=test()"
в любом месте, он вернется #VALUE!
. Отладка покажет, что при обновлении A1 он попытается повторно выполнить test().
Можете ли вы предотвратить использование Excel? Например. говоря: «Не обновляйте ни одного из моих номеров, пока я не закончил эту функцию»? Я попытался Application.Calculation
флаг, или делать какие-то внешние проверки параллельности, но это не похоже на работу ...
Не пытайтесь изменить ячейку листа из UDF, только возвращайте значение через его заголовок. –
@ Gary'sStudent действительная точка. Как правило, вы не можете изменить ДРУГИЕ ячейки, чем те, из которых вызывается функция. Измените его на Sub, тогда вы будете в порядке –
Это возвращает ошибку из-за того, о чем упоминает Gary'sStudent. UDF не разрешается манипулировать листом, а строка 'Range (« A1 ») = 1' заставляет его завершать. Отладка покажет вам, что эта строка терпит неудачу. –