Цитата:
Уважаемые гуру, подскажите как избавиться от этой проблемы.
Не любит Visio, когда его пытаются обмануть
В Visio циклические ссылки официально запрещены. Если он сам это обнаруживает, то выводит сообщение об ошибке, блокируя ввод такой формулы.
В данном случае контроль не срабатывает, потому что зацикливание идет через функцию SetF и дополнительные ячейки, а это отловить труднее.
Теперь механизм ошибки. Когда Вы тянете нижний шейпа край вверх, то высота шейпа уменьшается. Но шейп-то остается селектированным и мышку Вы продолжаете держать. Поэтому эффект такой, как будто вы на каждом шаге еще поддергиваете нижний край вверх (просите еще больше уменьшить высоту). Вот он и цикл.
Ситуацию можно несколько улучшить, если User.Row_2 сделать чувствительной только к изменению текста.
Код:
User.Row_2=IF(GetVal(Height)<User.Row_1,SETF(GetRef(Height),User.Row_1),0)+DEPENDSON(User.Row_1)
Функция GetVal дает однократное считывание значения высоты.
А зависимость от движения мышки сделать через EventXFMod
Код:
EventXFMod = IF(Height<User.Row_1,SETF(GetRef(Height),User.Row_1),0)
То есть по минимуму нужно одну формулу изменить, другую добавить.
При этом останется небольшой эффект "сползания". Если шейп уже уперся в минимум текст и Вы пытаетесь уменьшать его дальше (мышкой за край), то он будет сдвигаться. Но, думаю, с этим уже можно смириться. Кроме того, это эффект можно сделать односторонним, если установить LocPinY в Height*0 или Height*1. Тогда с одной стороны появится "упор", а с другой "сползание" останется.