Excel VBA将静态范围复制到不同工作表上的动态范围

时间:2016-03-16 00:32:29

标签: excel vba excel-vba

我遇到了一些问题,因为我是VBA的新手,但我确信它有一个非常简单的解决方案。

我基本上想要自动将新数据添加到工作表中。

Sheet:INB BASKET Cells:A2:I76包含指向另一个工作表的实时链接。 基本上我想将这些值作为值复制到Sheet IND TOTAL下面按下按钮上的最新条目(不是不断更新)。

我在excel中创建了一个动态命名区域(PasteRange),它选择了我要粘贴到的最后一个条目下面的75行:

=OFFSET('IND TOTAL'!$A$1,COUNTA('IND TOTAL'!$A:$A),0,75,9)

然后我创建了一个包含以下内容的模块:

Sub CopyRange()
Dim CopyFrom As Range

Set CopyFrom = Sheets("IND BASKET").Range("A2", [I76])
et PasteArea = Sheets("IND TOTAL").Range("PasteRange")

CopyFrom.Copy
PasteArea.PasteSpecial xlPasteValues
End Sub

但到目前为止还没有成功,请指教。

1 个答案:

答案 0 :(得分:6)

如果您只对粘贴值感兴趣,那么直接值传输效率更高,并且不涉及剪贴板。

with Sheets("IND BASKET").Range("A2:I76")
    Sheets("IND TOTAL").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Resize(.Rows.Count, .Columns.Count) = .Value
end with

使用您自己的复制,粘贴特殊xlPasteValues,您只需在目标的左上角指定单元格,并允许复制的区域定义大小和形状。

Sheets("IND BASKET").Range("A2:I76").Copy
Sheets("IND TOTAL").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues

如果没有像

这样的易变的OFFSET函数,你的命名范围的定义可能会更好
=INDEX('IND TOTAL'!$A:$A, MATCH("zzz",'IND TOTAL'!$A:$A )+1):INDEX('IND TOTAL'!$I:$I, MATCH("zzz",'IND TOTAL'!$A:$A ) + 75)
'or for just the first cell
=INDEX('IND TOTAL'!$A:$A, MATCH("zzz",'IND TOTAL'!$A:$A )+1)

这假定A列包含我使用COUNTA而不是COUNT推断的文本。如果列A包含数字,则交换1e99用于" zzz"。

相关问题