我正在尝试在VBA中执行看似简单的动态范围任务。
上表包含从外部网站下载的数据。每天都会添加新行。
第二个表引用了第一个表。因此,例如,此表中的日期列将是= 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
但是我得到了一个内存错误,我怀疑这是因为它粘贴了数千个空白行而不是停止。如何调整此代码以执行我需要宏执行的操作?
答案 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