Я тоже не уверен, почему вы получаете сообщение об ошибке, но вы, безусловно, можете сократить код и, возможно, изолировать причину возникновения ошибки.Если у вас есть избыточный код, который вы делаете, разделение этого раздела на отдельный метод «функционально изолирует» эту логику.Это важно, потому что если у вас есть ошибка, вы можете исправить ее, изменив логику только в одном месте.В противном случае вам придется изменить все сгенерированные строки копирования-вставки, чтобы создать приведенный выше пример.Итак, процедура, подобная этой:
Private Sub CopyMe(ByVal sheetIndex As Long, _
ByVal from As String, _
ByVal to As String)
Sheets(sheetIndex).Range(from).Copy
With Sheets("Programs1").Range(to)
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlPasteFormats
End With
End Sub
Итак, теперь ваша основная логика будет выглядеть следующим образом:
Sub Programs()
Dim sh As Worksheet, N As Long
Dim i As Long, M As Long
N = Sheets.Count - 4
M = 2
For i = 6 To N
CopyMe i, "D4", "A2" 'copy Form number + Edition date
CopyMe i, "C180", "B2" 'copy Program
CopyMe i, "E180", "C2" 'copy ProgramStatus
' ...
Next i
End Sub
Так что, если, когда вы структурируете свой код таким образом, все CopyMe
строки работают за исключением столбца K
, тогда вы поймете, что у вас есть проблема со столбцом, а не с теми же копиями и вставками.(Но я думаю, что это сработает ...)