2017-01-12 7 views
0

Я пытаюсь скопировать значения диапазона ячеек, а затем вставить его в другую книгу с помощью VBA. Однако код вставляет только первую скопированную ячейку, оставляя остальную часть диапазона пустой. Я не мог идентифицировать свою ошибку.Excel - копирование (перенос) между книгами с использованием VB

Это код:

Sub Data() 
Dim wbk As Workbook` 
Dim wks As Worksheet` 
carp = ThisWorkbook.Path & "\Bases de datos\" 
a = "Cuadros_de_salida_IMAE.xls" 
Application.EnableEvents = False 
Set wbk = Workbooks.Open(carp & a) 
Set wks = wbk.Worksheets("Activ") 
Application.EnableEvents = True 
wks.Rows.Hidden = False 


b = "D" 
c0 = 9 
c1 = 25 
E = "IMAE" 
f0 = "G" 
f1 = "W" 
g = 6 
iniRow = c0 
finRow = c1 
wks.Range(b & iniRow & ":" & b & finRow).End(xlToRight).Copy 
ThisWorkbook.Worksheets(E).Range(f0 & g).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, Transpose:=True 

Windows(a).Activate 
Application.DisplayAlerts = False 
ActiveWorkbook.Close 
Application.DisplayAlerts = True 

Спасибо. Я очень ценю некоторую помощь.

ответ

0

Возможно, лучший способ сделать это, но проблема связана с оператором wks.Range(b & iniRow & ":" & b & finRow).End(xlToRight).Copy. Если вы измените это на:

wks.Range(b & iniRow & ":" & b & finRow).Select 
Range(Selection, Selection.End(xlToRight).Copy 

Ваш код должен работать. Когда сомневаешься, пользуйся макрорекордером :)

+0

Он использует wks.Range («G6: G25»). Конец (xlToRight). Копируйте его по своей линии (следуя за его переменными). Не хотите ли вы избежать выбора и ускорить этот процесс? Вы знаете окончательную строку, но последний столбец является единственным параметром миссии, следовательно, xlToRight. – Cyril

+0

Спасибо за ваш ответ. –

1

Понадобилось время, чтобы вернуть код, который у вас есть ... кажется, много ненужных переменных/ссылок.

Dim LR as Long 
LR = Cells(wks.Rows.Count, 1).End(xlUp).Row 

Dim LC as Long 
LC = Cells(wks.Columns.Count, 1).End(xlToLeft).Column 

wks.RANGE(Cells(9,7),Cells(LR,LC)).Copy 

Worksheets(E).Range(Cells(6,7),Cells(LR-3,LC)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, Transpose:=True 'LR-3 because G9 and G6 row difference 

Это должно быть достойным началом для вас.

+0

Обычно я могу выбрать начальную ячейку (G6) для места вставки, а excel/vba определит диапазон. Я закодирован с G6 до конца диапазона (динамический). – Cyril

+0

Спасибо Кирилл, ваше предложение было действительно полезно. –

+0

Это ответ на ваш вопрос, @AlvaroLopezE. ? – Cyril

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

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