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

标签 excel vba

我希望能够将关闭的工作簿 (x) 中的数据插入到事件工作簿 (y) 的命名范围(“YearlyData”)中。该范围位于名为“目标”的工作表中。

但是,命名范围“YearlyData”有一个标题行(即范围的第 1 行),实际的“原始”数据从第 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

这是我需要更改代码的地方。

我需要在命名范围“YearlyData”的第 1 行和第 2 行之间插入正确的行数,然后需要将数据从已关闭的工作簿粘贴到这些行中。

除此之外,我只想从源数据簿中复制 A:B 和 E:H 列。

我读过一些帖子,其中用户建议使用“.Insert 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

最佳答案

您并没有真正说明 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

关于excel - 将复制的范围(从关闭的工作簿)插入到打开的工作簿的命名范围中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32411432/

相关文章:

Python、Pandas 删除 Excel 中的行

excel - 如何删除 Excel 工作表中单元格中的附加值

excel - 基于不同列和不同行的值进行过滤

excel - 如何在 Excel 中的一组值中找到*最*平均值/最接近平均值的值?

javascript - 如何在客户端将Javascript数组数据导出到excel

excel - 在 Excel 中将范围传递给迷你图

excel - 使用图表时避免使用“激活”和“选择”(Excel)

sql - 在 Excel 中复制 SQL 数据和粘贴时格式化

excel - 如何指定范围而不是偏移量,excel VBA?

vba - 隐藏给定行数的 Excel 宏