2015-09-05 2 views
2

Я хочу иметь возможность вставлять данные из закрытой книги (x) в Именованный диапазон («YearlyData») моей активной книги (y). Этот диапазон находится в листе, называемом «Destination».Вставка скопированного диапазона (из закрытой книги) в именованный диапазон открытой книги

Однако, именованный диапазон «YearlyData» имеет заголовок строку (а именно строка 1 диапазон) и начинаются фактические «сырые» данные из Row 2.

То, что я хочу сделать, это сдвинуть вниз содержимое из строки 2 далее на точное количество строк, которые должны быть вставлены из рабочей рабочей области (x).

Вот то, что я до сих пор:

Option Explicit 

Sub DataFromClosedFile() 

On Error GoTo ErrHandler 

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 

Dim x As Workbook 
Dim y As Workbook 

Dim CA_TotalRows As Integer 
Dim CA_Count As Integer 

х является закрытым, источником рабочей книги у является текущей активной рабочей книги, в которую я буду вставлять данные

Set y = ThisWorkbook 'ActiveWorkbook 
Set x = Workbooks.Open("PATH", True, True) 

Это именованные диапазон, в который я хочу скопировать данные

Dim YearlyData As Range 

Set YearlyData = y.Worksheets("Destination").Range("YearlyData") 

Затем подсчитайте количество строк, которые необходимо скопированы:

CA_TotalRows = x.Worksheets("August_2015_CA").UsedRange.Rows.Count 

И ЗДЕСЬ, где мне нужно изменить код.

Мне нужно вставить правильное количество строк между строками 1 и 2 именованного диапазона «YearlyData», а затем мне нужно вставить данные в эти строки из закрытой книги.

В дополнение к этому, я хочу только скопировать столбцы A: B и E: H из исходной базы данных.

Я прочитал сообщения, в которых пользователи предлагают использовать «.Insert Shift: = xlDown», но мне не удалось заставить его работать.

Итак, мой старый код, используя «Sheet3», вместо «Destination», который работает, но, очевидно, не копирует его в названный диапазон «YearlyData», который я действительно хочу сделать.

Обратите внимание, что я начинаю копировать данные из строки 2 исходной книги (x), потому что я не хочу копировать названия, а только необработанные данные.

y.Worksheets("Sheet3").Range("A1:B" & CA_TotalRows - 1).Formula = x.Worksheets("August_2015_CA").Range("A2:B" & CA_TotalRows).Formula 
y.Worksheets("Sheet3").Range("C1:F" & CA_TotalRows - 1).Formula = x.Worksheets("August_2015_CA").Range("E2:H" & CA_TotalRows).Formula 

Любые предложения будут высоко оценены!

x.Close False 
Set x = Nothing 

Application.Calculation = xlCalculationAutomatic 

ErrHandler: 
    Application.EnableEvents = True 
    Application.ScreenUpdating = True 

End Sub 
+0

Это тот же вопрос, что и [этот] (https://stackoverflow.com/questions/32407103/)? – BruceWayne

+0

Нет, это не так. В другом я создавал код для вставки данных в Sheet3, теперь я хочу идти дальше и вставлять его внутри диапазона (между существующей строкой 1 и строкой 2). Другими словами, я хочу 1. Добавьте необходимое количество строк внутри диапазона, а затем 2. вставьте данные (чтобы избежать перезаписи). –

ответ

0

Вы на самом деле не сказать, насколько большой Range("YearlyData") так это потенциально может вставить дополнительные строки, которые не нужны. Кроме того, не уверен, почему вы сделали .formula. Я изменил его на .value.

Sub DataFromClosedFile() 

Dim x As Workbook 
Dim y As Workbook 
Dim yws As Worksheet 
Dim xws As Worksheet 

Dim CA_TotalRows As Integer 
Dim CA_Count As Integer 

Set y = ThisWorkbook 'ActiveWorkbook 
Set x = Workbooks.Open("PATH", True, True) 
Set yws = y.WorkSheets("Destination") 
Set xws = x.WorkSheets("August_2015_CA") 

Dim r As Long 

r = yws.Range("YearlyData").Cells(1, 1).Row 

CA_TotalRows = xws.UsedRange.Rows.Count 

yws.Rows(r + 1).EntireRow.Resize(CA_TotalRows).Insert 

yws.Range(Cells(r + 1, 1), Cells(r + CA_TotalRows - 1, 2)).Value = xws.Range("A2:B" & CA_TotalRows).Value 
yws.Range(Cells(r + 1, 3), Cells(r + CA_TotalRows - 1, 6)).Value = xws.Range("E2:H" & CA_TotalRows).Value 

x.Close False 
Set x = Nothing 

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