将复制的范围(从已关闭的工作簿)插入到打开的工作簿的命名范围中

时间:2015-09-05 09:19:22

标签: excel vba

我希望能够将已关闭的工作簿(x)中的数据插入到我的活动工作簿(y)的命名范围(" YearlyData")中。此范围位于名为" Destination"。

的工作表中

然而,命名范围" YearlyData"有一个标题行(即范围的第1行)和实际的' raw'数据从第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

x是已关闭的源工作簿,y是我将粘贴数据的当前活动工作簿

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列。

我已阅读过帖子,用户建议使用'。插入Shift:= xlDown'但我没有设法让它发挥作用。

以下是我的旧代码使用" Sheet3"而不是" Destination"哪个有效 - 但显然不会将其复制到命名范围" YearlyData"这就是我真正想做的事情。

请注意,我开始从源工作簿(x)的第2行复制数据,因为我不想复制标题,只复制原始数据。

 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

1 个答案:

答案 0 :(得分: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