Если все, что вы копируете, это значения, а не копирование всего столбца, что требует очень много ресурсов (фактически вы копируете 1048576 ячеек), вы можете попробовать реализовать оператор lastrow и скопировать только используемый диапазон столбца. Это может значительно сократить время выполнения в зависимости от того, сколько у вас значений. Что-то из строк:
Sub copy()
Dim lastr As Long
lastr = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
Sheet2.Range("A1:A" & lastr).Value = Sheet1.Range("A1:A" & lastr).Value
End Sub
Чтобы адаптировать ваш код, вы должны заменить следующую строку:
SrcWbk.Sheets(1).Range("A:A").Copy DestWbk.Sheets("Data").Range("A:A")
на:
lastr = SrcWbk.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
DestWbk.Sheets("Data").Range("A" & lastr).value = SrcWbk.Sheets(1).Range("A" & lastr).value
Обратите внимание, еслиДлина вашего столбца варьируется, вы должны повторить последний расчет для каждого столбца. Если все ваши столбцы имеют одинаковую длину (все заканчиваются в одной строке), тогда подойдет первое вычисление для каждого столбца.