2016-04-29 7 views
0

У меня есть следующий фрагмент VBA кода в Excel:VBA копия колонны резко увеличивает размер файла

Dim src As Worksheet 
Dim des As Worksheet 
Dim rows As Integer 
Dim src_rows As Integer 
Set src = Sheets("source sheet") 
Set des = Sheets("destination sheet) 

'Copy and Paste relevant columns 
src.Activate 
src_rows = Range("A1", Range("A1").End(xlDown)).Count 
Range("A2:G2" & src_rows).Copy 
des.Activate 
Range("A2").PasteSpecial Paste:=xlPasteValues 

Моя цель состоит в том, чтобы скопировать несколько столбцов из исходного листа (это населен соединение SQL данных) в другой лист. Исходные данные могут меняться, поэтому я подсчитываю, сколько строк в настоящее время использует переменная src_rows

Этот код повторяется, чтобы скопировать другие необходимые столбцы. Все работает так, как я хочу. Однако после запуска и сохранения размер файла скачков от 5 МБ до 60 МБ! Это не могут быть дополнительные данные, так как есть только около 10K строк. И если я удалю скопированные данные и заново сохраню файл, он не вернется к 5 МБ.

Я также пробовал использовать range(__).copy destination:= ___, но это не работает. Если я копирую вручную, размер файла не увеличивается. Если я вручную копирую и записываю макрос и запускаю этот макрос, файл увеличивается.

Любые предложения были бы очень признательны.

ответ

2

У вас есть дополнительный 2 infront строки при копировании. Должно быть Range("A2:G" & src_rows).Copy.

Я бы также предложил использовать RangeUsed.Rows вместо отсчета вниз (если 2-я строка пуста, то End(xlDown) перейдет к максимальной строке).

+0

Спасибо, заметил, что на других, но пропустили его на этом. Incorporated UsedRange сейчас, искал что-то лучше, чем то, что я сделал. благодаря – pokeairguy

0

Вместо того чтобы копировать и вставлять данные в буфер обмена, попробуйте использовать VBA для установки значений одного диапазона в другом, например.

Sheets("dest").Range("A1:A100").Value = Sheets("src").Range("A1:A100").Value 

является более эффективным, чем

Sheets("dest").Range("A1:A100").Copy 
Sheets("src").Range("A1:A100").PasteSpecial xlPasteValues 
0

смотрите в Simplied ниже код

Sub test() 
    Dim src As Worksheet 
    Dim des As Worksheet 
    Dim src_rows As Long 
    Set src = Sheets("source sheet") 
    Set des = Sheets("destination sheet") 
    src.Range("A2:G" & src.Range("A1").End(xlDown).Row).Copy des.Range("A2") 
End Sub 

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

  • Нет связанных вопросов^_^