2016-06-22 3 views
0

Мне нужно скопировать ряд ячеек из одной книги в другую. Однако, к сожалению, из-за размера двух книг я не могу открыть их одновременно.Работа с именованными диапазонами и объектами

Таким образом, идея в том, чтобы сделать это в два этапа:

1) Открыть workbook1 сохранить диапазон от одной книги к ряду объектов и закрыть workbook1

2) Открыть workbook2 сохранить диапазон от объекта к диапазону в рабочей книге

Но это не работает. Может кто-то помочь с кодом. Благодарю. Пример кода ниже

Dim Temp as Range 
Workbooks.Open (Model1) 
Workbooks(Model1).Activate 
Temp = Range("First_Input").Value 
Workbook(Model1).Close 

Workbooks.Open(Model2) 
Workbooks(Model2).Activiate 
Range("Second_Input").Value = Temp.Value 
+4

Можете ли вы определить _not working_ – litelite

+0

Я не думаю, что я готов погрузиться в полное решение. Но вы должны заглянуть в запрос ODBC, в зависимости от того, как структурированы данные, вы можете его вытащить, не открывая файл вообще. – jcarroll

ответ

0

рабочий пример ниже:

  • Комментарии заделаны и работает как (без изменений). Попробуйте это в книгах со случайными данными.
  • Пример работы для открытой книги, просто измените ее на «Открытие» книги.
  • Я использовал адрес диапазона в примере. Вы можете играть с этим в зависимости от того, что вы хотите сделать.

Нижеприведенные работы должны быть легко реализованы, скопированы и вклеены в excel.

Public Sub CopyData() 


Dim wkb1 As Workbook 
Dim wkb2 As Workbook 
Dim sht1 As Worksheet 
Dim sht2 As Worksheet 
Dim wkb1rng As Range 
Dim wkb2rng As Range 

'Point to Workbook and Sheet 1 
'Set wkb1 = Workbooks.Open(Model1) ' To Open Workbook 
Set wkb1 = Workbooks("Book1") ' If workbook is open already 


'Sheets is the Index use String for the sheet name 
Set sht1 = wkb1.Sheets(1) 

' Dont need this if you moving objects directly in and out of memory. 
' Workbooks(Model1).Activate 

' Point to Range 
Set wkb1rng = sht1.Range("First_Input") 

' What is the address of the Range 
Dim address As String 
address = wkb1rng.Cells.address 

'Point to Workbook and Sheet 2 
Set wkb2 = Workbooks("Book2") 

'Sheets is the Index use String for the sheet name 
Set sht2 = wkb2.Sheets(1) 

'I imagine Second_Input should be output? 
'Use this only if the data range is exactly the same size 
'Set wkb2rng = Range("Second_Output") 
'else use this ... 
Set wkb2rng = sht2.Range(address) 

'Copy data across ... 
wkb2rng.Value = wkb1rng.Value 

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