首页 > 解决方案 > 复制粘贴整个表格

问题描述

我是 VBA 新手(也在 Stackoverflow 中),我需要帮助。我想复制一个包含许多数据的表并粘贴到另一本书(来自 D2 列)。

该表从 A 到 F,行是未知的,因为它们每天都在变化。

这是我的代码不起作用:

Windows(" PERIMETRE.xlsx").Activate
    Range("A:F").Select
    Selection.Copy

Windows("OP_COMMERCIALES.xlsm").Activate
    Sheets("DETAIL").Select
    Range("D2").Select
    ActiveSheet.Paste

标签: excelvba

解决方案


无需选择或复制/粘贴。

首先,我建议将所有参数(如工作簿名称等)作为常量放在模块的标题中。这样更容易修复重命名等。

在您的复制例程中,您可以使用以下方法定义您的源范围currentregion

返回表示当前区域的 Range 对象。当前区域是由空白行和空白列的任意组合限定的范围。只读。(https://docs.microsoft.com/en-us/office/vba/api/excel.range.currentregion

然后定义目标范围 - 它取决于源范围的大小。

最后将源范围的值写入目标范围(不选择、不复制、不粘贴)。重要提示:格式不传输

Option Explicit

Private Const wbSourceName As String = "perimetrie.xlsx"
Private Const numberOfColumnsToCopy As Long = 6     'A - F

Private Const wbTargetName As String = "OP_COMMERCIALES.xlsm"
Private Const wsTargetName As String = "DETAIL"
Private Const cellTarget As String = "D2"



Sub copyTable()

Dim wsSource As Worksheet
Set wsSource = Application.Workbooks(wbSourceName).Worksheets(1)

Dim wsTarget As Worksheet
Set wsTarget = Application.Workbooks(wbTargetName).Worksheets(wsTargetName)


Dim rgSource As Range
'assumption to use currentregion: continous range, no empty rows and columns in area to copy
Set rgSource = wsSource.Range("A1").CurrentRegion

'resize range to the necessary number of columns (A-F)
set rgSource = rgSource.Resize(ColumnSize:=numberOfColumnsToCopy)


Dim rgTarget As Range
Set rgTarget = wsTarget.Range(cellTarget)

'resize rgTarget according to dimensions of rgSource
With rgSource
    set rgTarget = rgTarget.Resize(.Rows.Count, .Columns.Count)
End With


'write values from rgSource to rgTarget - no copy/paste necessary!!!
rgTarget.Value = rgSource.Value


End Sub

推荐阅读