2014-01-03 2 views
3

У меня есть программа для копирования скрытых формул резервного копирования для выбора, который отлично работал в Excel 2003/2007/2010. Когда я запускаю его в 2013 году, он начинает работать с выбором, а затем просто завершает работу, сообщение об ошибке не сообщается. При тестировании только этого цикла он может работать для двух ячеек, он может работать для 5 ячеек, но не более 6. Поскольку выбор в основном представляет собой группы несмежных ячеек, я не могу просто скопировать весь диапазон за один раз без серьезной операции, чтобы переименовать все диапазоны.Copy PasteSpecial in For Каждый цикл выходит нерегулярно

Любая идея, что случилось с 2013 годом? Что я могу сделать, чтобы заставить его работать сейчас?

Вот ядро ​​кода, который не работает:

Sub TestLoop() 
    Dim c As Range 

    For Each c In Selection 
     If c.Locked = False And Not IsNumeric(c.Offset(0, 30).Formula) _ 
      And c.Offset(0, 30).Formula <> "" Then 
      With c 
      .Offset(0, 30).Copy 
      .PasteSpecial xlPasteFormulas 
      End With 
     End If 
    Next c 

End Sub 

ответ

3

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

Изменить этот код:

.Offset(0, 30).Copy 
.PasteSpecial xlPasteFormulas 

Для этого:

.FormulaR1C1 = .Offset(0, 30).FormulaR1C1 
+0

Brilliant! Конечно, я должен был подумать о пути, отличном от буфера обмена, и в качестве бонуса он также должен работать быстрее. Благодаря!! – user3158939

+0

+1 yep, всегда лучше работать, где это возможно, как вы предложили, – brettdj