Excel — Остановить вычисление при открытии, чтобы предотвратить циклическую ссылку

#vba #excel

#vba #excel

Вопрос:

У меня есть большая электронная таблица с множеством встроенных циклических ссылок. Я встроил код VBA для установки ручного и итеративного вычисления при открытии, а также код для принудительного вычисления при открытии книги после установки итеративного вычисления. Однако, похоже, что книга пытается выполнить вычисления даже до запуска этого кода VBA при открытии, так что, если для книги уже установлено автоматическое вычисление без итеративного вычисления, она запускает книгу, а затем завершается сбоем из-за циклических ссылок.

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

Спасибо.

Комментарии:

1. Опубликуйте код, который вы запускаете при открытии книги.

Ответ №1:

В пустой файл .xlsm в событии открытия рабочей книги введите этот код

    Private Sub Workbook_Open()
       Application.calculation = xlCalculationManual
       ' Add code to open the real workbook
       ' ---------
   End Sub
  

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

Кроме того, в требуемой книге (той, в которой есть циклические ссылки) событие onOpen должно инициировать закрытие вызывающей книги без сохранения.

Таким образом, процесс прозрачен для пользователя, и он / она открывает только список вызывающих абонентов.

Комментарии:

1. HNK, спасибо за отзыв. Однако у меня уже был этот код в моей рабочей книге. Проблема, по-видимому, заключается в том, что если приложение уже настроено на автоматическое перед открытием книги, оно начинает пересчитывать все еще до того, как оно попадет в код VBA, чтобы изменить настройку вычисления на ручное — есть ли способ изменить это, чтобы оно не вычислялось сразу после открытия файла?

2. кстати, использование циклических ссылок почти всегда является очень плохой идеей и может привести к действительно сложным проблемам с отладкой

3. HNK, я понимаю, что вы говорите, и это определенно на правильном пути. Требует ли это решение, чтобы конечный пользователь находился в той же сети, где сохранена моя необходимая книга? Мое намерение (не идеальное, но так уж устроено) заключается в том, чтобы файлы предоставлялись по электронной почте по мере появления обновлений, поэтому я пытаюсь продумать, как предоставить общий доступ к вызывающей книге по электронной почте, а также по-прежнему иметь возможность открывать требуемую книгу без отправки двух отдельных файлов. Извините за мое невежество, но это очень полезно для меня!

4. Не совсем, я имею в виду, что вам нужно будет указать путь к вызываемой (вашей) книге. Вызывающая книга может находиться где угодно. Вызываемая книга должна находиться в ‘доступном’ месте… который также может быть общим сетевым диском

5. Если этот ответ полезен для вас, то вы можете проголосовать / отметить его как ответ, пожалуйста. tks