VBA动态范围扩展行

时间:2016-10-19 15:16:02

标签: excel vba excel-vba

我正在尝试在VBA中执行看似简单的动态范围任务。

enter image description here

上表包含从外部网站下载的数据。每天都会添加新行。

enter image description here

第二个表引用了第一个表。因此,例如,此表中的日期列将是= USA!A18。

我想编写一个VBA脚本,以便每当将新数据添加到第一个表时,我都可以运行宏来扩展第二个表的行/公式以添加新数据。

因此,如果第一个表中添加了5个新行,则宏会将现有行和公式从第二个表中的列A到W扩展为五个。在不破坏电子表格中的其他代码的情况下,它不能有任何空行或#VALUE错误。数据从A9开始并延伸到W9。

我尝试实施以下内容:

Sub extendrows()

Dim lastRow As Long

lastRow = Worksheets("USA").Range("A" & Rows.Count).End(xlUp)

Worksheets("USA defprob").Range("A9:W9").AutoFill Destination:=Range("A9:W" & lastRow)

End Sub

但是我得到了一个内存错误,我怀疑这是因为它粘贴了数千个空白行而不是停止。如何调整此代码以执行我需要宏执行的操作?

2 个答案:

答案 0 :(得分:2)

不要尝试动态调整范围,而是将数据放在Excel表格中,让Excel为您完成工作。选择您的数据并按 CTRL + T 将范围转换为表格。 Excel自动创建表示整个数据集,各列,甚至没有标题行的数据集的命名范围。

因此,如果创建的表被调用" Table1"然后使用参考"表1"引用除表头行之外的表中的所有单元格。

引用单个列也更容易,因为Excel根据您创建的列标题创建命名范围。例如,如果您的第一列在"表1"被称为" MyFirstColumn"然后使用" Table1 [MyFirstColumn]"引用表格整列(不包括标题)。

如果您想知道要用于表的任何部分的命名范围,只需转到表格外至少两行或两列的单元格。键入等号,然后在表中选择一个范围。例如,当您选择多个相邻列(仅数据,没有标题)时,您将看到范围名称看起来像" Table1 [[MyFirstColumn]:[MySecondColumn]]"。

答案 1 :(得分:2)

你可以试试这个:

Option Explicit

Sub extendrows()
    Dim nDataRows As Long

    With Worksheets("USA")
        nDataRows = .Range("A" & .Rows.Count).End(xlUp).Row - 2 ' assuming data start from row 3 in "USA"
    End With

    With Worksheets("USA defprob").Range("A9:W9")
        .AutoFill Destination:=.Resize(nDataRows)
    End With
End Sub