2014-01-10 9 views
4

У меня есть 2 книги и я пытаюсь найти способ скопировать столбец из wb1 в wb2. Я знаю, что могу просто скопировать/вставить, но идея состоит в том, чтобы сделать что-то, чтобы мой босс мог щелкнуть макрос, и все заполняется.VBA Excel Macro Копирование одной колонки в другую рабочую книгу

Я пытался код я наткнулся на другой вопрос:

Sub Import() 

Dim sourceColumn As Range 
Dim destColumn As Range 

Set sourceColumn = Workbooks("C:\Documents and Settings\********\My Documents\*********.xlsm").Worksheets(2).Columns("BL") 
Set destColumn = Workbooks("C:\Documents and Settings\********\My Documents\*********.xlsm").Worksheets(2).Columns("A") 

sourceColumn.Copy Destination = destColumn 

End Sub 

Когда я запускаю это, я получаю «Подстрочный Out Of Range» Ошибка.

Исходный столбец содержит формулу, основанную на других столбцах, а столбец назначения пуст, но даже когда я запускал это на манекенах с маленькими цифрами, я получил ту же ошибку.

Есть ли что-то супер базовое, мне здесь не хватает?

+0

Вам нужно открыть книги, и вам не нужен путь, поэтому 'Workbooks (" blah.xlsm ")' –

+0

Есть ли способ сделать это, не открывая книги? Я также попробовал код в этом сообщении, [link] (http://stackoverflow.com/questions/19351832/vba-copy-from-one-workbook-and-paste-into-another), но это дало мне " Object Required "... – Aubrey

+0

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

ответ

2

EDIT: Только что понял, что, возможно, отсутствует в этом фрагменте кода, который у вас есть. Добавьте туда «:»! Перейдите на destination:=Workbooks("...., и он должен работать нормально.

Дополнительная информация: При работе с параметрами функции вы должны добавить «:», чтобы указать компьютер, на котором вы не оцениваете равенство, но выполняете назначение параметров.


(Старый, кричащий ответ) Как я полагаю, это то, что вы пытаетесь сделать; этот скрипт, вероятно, сделает то, что вы хотите. Однако стиль НЕ будет сохранен.

Sub yourSub() 

Application.ScreenUpdating = False 'Disables "Screen flashing" between 2 workbooks 

Dim colA As Integer, colB As Integer 
Dim rowA As Integer, rowB As Integer 
Dim wbA As Workbook, wbB As Workbook 

Set wbA = ThisWorkbook 
Set wbB = Workbooks.Open("C:/YourFilePath/YourFile.xls") 

colA = 1 'Replace "1" with the number of the column FROM which you're copying 
colB = 1 'Replace "1" with the number of the column TO which you're copying 

rowA = 1 'Replace "1" with the number of the starting row of the column FROM which you're copying 
rowB = 1 'Replace "1" with the number of the row of the column TO which you're copying 

wbA.Activate 
lastA = Cells(Rows.Count, colA).End(xlUp).Row 'This finds the last row of the data of the column FROM which you're copying 
For x = rowA To lastA 'Loops through all the rows of A 
    wbA.Activate 
    yourData = Cells(x, colA) 
    wbB.Activate 
    Cells(rowB, colB) = yourData 
    rowB = rowB + 1 'Increments the current line of destination workbook 
Next x 'Skips to next row 

Application.ScreenUpdating = True 'Re-enables Screen Updating 

End Sub 

У меня еще не было времени проверить это. Сделай это как можно скорее.

+0

Я пробовал это, и сначала я получил ошибку объекта, поэтому добавил код для активации точных листов в книгах. Теперь я получаю ошибку «Subscript out of range» ... Я знаю, что код доходит до 'wbA.Activate' и' Worksheets («Места размещения»). Активируйте ', но затем появляется всплывающая подсказка. В 'lastA = Cells (Rows.Count, colA) .End (xlUp) .Row'« End »в моем коде не отображается синим, может ли я что-то не так там? – Aubrey

+0

На самом деле, я просто что-то зафиксировал, и он работает. Благодаря!! – Aubrey

+0

Рад, что я могу помочь! : D –

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