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

Ber*_*rry 3 excel vba excel-vba

我正在解决一些问题,因为我是VBA的新手,但我确信它有一个非常简单的解决方案.

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

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

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

=OFFSET('IND TOTAL'!$A$1,COUNTA('IND TOTAL'!$A:$A),0,75,9)
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

但是到目前为止没有成功,请指教.

小智 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
Run Code Online (Sandbox Code Playgroud)

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

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

如果没有波动的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)
Run Code Online (Sandbox Code Playgroud)

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