2015-08-10 1 views
1

У меня есть 2 книги, «старые» & «новый». Оба идентичны (оба имеют одинаковые наборы рабочих листов - имена рабочих листов и все - с одинаковыми формулами)Ошибка #REF при импорте рабочей таблицы, содержащей формулы + VBA - Excel Version 2013

Я пытаюсь импортировать Лист А из «старого» в «новый». То, как я делаю это удаление листа А из «новых», а затем скопировать весь лист (т.е. лист А из «старой») от «старой» на «новый»

wkbOld.worksheets("Sheet A").Copy After:=wkbNew.Worksheets(nPos) 
'nPos is the position of Sheet A in these workbooks 

Лист А имеет Формулы ссылаясь на ячейки в листе B. У меня также есть лист Z, который имеет формулы, относящиеся к ячейкам в листе A.

При импорте Я выключаю вычисление для всех листов, присутствующих в «новом» (toggleAutomaticCalculation false). Я включаю автоматический расчет после того, как я «импортировал» мой лист (toggleAutomaticCalculation true). Я использую следующий sub для переключения автоматического расчета.

Public Sub toggleAutomaticCalculation(bToggle As Boolean) 
Dim wks As Worksheet 

    For Each wks In ThisWorkbook.Worksheets 
     wks.EnableCalculation = bToggle 
    Next wks 
End Sub 

После того как я сделал свою «импортирующей», я нахожу #REF ошибки в листе Z в «новый», на те клетки, которые имели формулы со ссылкой на лист А, но формулы в настоящее импортируемого лист A (т.е. теперь они привязаны к листу B в новом)

Мои макросы для импорта присутствуют в «новом», откуда я их запускаю.

Мои вопросы заключаются в следующем:

  • Почему #REF ошибка происходит в листе Z, пока это не происходит в листе А, хотя оба листа содержат формулы со ссылкой на внешние таблицы?

  • Есть ли способ предотвратить ошибки #REF в Sheet Z?

Моей единственной возможностью в настоящее время является повторная установка исходных формул в Листе Z (с использованием отдельного вспомогательного) после импорта.

Я использую Excel 2013, и я хочу, чтобы работать в Excel 2013.

Любезно помощь.

ответ

0

Я думаю, что ошибки #REF будут возникать в Листе Z при удалении оригинального листа А, а не при копировании в новом. Вот почему Sheet Z получает ошибки #REF, но на листе A нет.

Я ударил этот вопрос раньше и нашел два возможных решения. Первый - скопировать диапазон (возможно, используемый диапазон) из «старого» A и вставить его в «новый» A. Это должно избегать всех ошибок #REF. Второй вариант, который я нашел, - найти и заменить все = в Листе Z символом, таким как | перед копированием в Листе А, а затем измените их. Это эффективно повторно вводить формулы, но проще

Рассмотрев вопрос больше, я бы предположил, что вам может потребоваться отключить автоматическое обновление перед удалением «старого» A (если это уже не то, что вы уже делаете)

+0

Благодарим вас за ответ. Вариант № 2 - это то, что я сейчас делаю, но немного по-своему (заменяя оскорбленные формулы снова из кеша тех же формул, которые я уже где-то хранил в «новом»). Но я рассматриваю это как неидеальное решение.Идеальное решение imho было бы заставить excel прекратить изменять эти формулы в Sheet Z до # REF, пока происходит импорт. К сожалению, при остановке и возобновлении автоматического расчета «нового» во время «импорта» для листа А это не работает для Sheet Z (как я уже упоминал в моем вопросе). – Vijay

+0

Мои рассуждения выглядят так: Формулы в Листе А, относящиеся к ячейкам в Листе В, также должны стать # REF, потому что после того, как я скопировал Лист А от «старого» к «новому», эти формулы относятся к ячейкам в Лист B «старого», который теперь чуждо этим формулам. Но этого не происходит. Однако формулы в Листе Z (те, которые относятся к Листу А), становятся # REF даже с автоматическим вычислением, остановленным во время импорта. Это меня озадачивает. – Vijay

+0

Я думаю, что это происходит потому, что ваши формулы в Листе А имеют листы B для ссылки во всех точках. Формулы листа Z не всегда имеют доступ к листу A. Вы отключите автоматический расчет до того, как вы удалите «старый» A или после? Если после этого я предлагаю вам попробовать сделать это до –

Смежные вопросы