2017-01-17 3 views
0

У меня проблема, когда формулы не обновляются (у меня есть ручной расчет). В частности, это формулы с некоторыми сложными зависимостями.Excel - зависимость функции, вызывающая отсутствие вычислений

Cell1: "=Cell2" 
Cell2: "IFERROR(FindData(X1, X2))" 

FindData функция VBA Я написал, что использует Index(Match(X1),Match(X2)) на заданном диапазоне (RangeXYZ).

Этот диапазон имеет ряд формул, которые подключаются к внешней службе данных (а не к переходу данных Excel, а только к другой пользовательской формуле vba).

Когда я вычисляю Cell1, Excel не вычисляет ни одну из нижеперечисленных вещей. Мне нужно, чтобы он принудительно вычислил RangeXYZ, а затем пересчитал Cell2, затем Cell1.

Благодаря

EDIT: У меня уже есть, в листе Cell1 содержится на:

Private Sub Worksheet_Calculate() 
    Application.calculatefull 
End Sub 

, но я считаю, это заканчивается в бесконечном цикле высчитывает. Я также попытался указать листы листов («Лист1»). Рассчитайте, но это не работает.

A Ctrl-Alt-F9, который действительно работает, является излишним и занимает слишком много времени.

+0

Спасибо за правки R3uK! – keynesiancross

+6

Возможно, попробуйте поставить 'Application.Volatile = True' как первую строку' FindData'? –

+0

@VincentG: Ты избил меня! ;) – R3uK

ответ

0

Я настоятельно рекомендую передать RangeXYX в качестве третьего параметра. Механизм вычислений Excel проверяет зависимости тестов рабочей книги, и вам нужно помочь в этом, а не обманывать его с помощью искусственных оптимизаций.

Если вы действительно хотите, чтобы стращать расчет двигатель Excel в делать ваши ставки, то вы могли бы попробовать это в обработчике событий

Option Explicit 

Private Sub Worksheet_Calculate() 
    Me.Range("RangeXYZ").Calculate 
End Sub 
Смежные вопросы