如何用VBA复制合并单元格

问题描述 投票:0回答:1

我有2个格式相同的Excel文件,但一个是主文件(用于计算),一个文件是从系统中提取的数据。我想用 VBA 将提取的文件的数据复制到主文件,但它不起作用。

文件格式如下: enter image description here

所以我想从 A1 复制到 I200,然后将其粘贴到主文件,但它引发错误“要执行此操作,所有合并的单元格需要具有相同的大小”或“Range 类的 PasteSpecial 方法失败”。

下面是我的示例代码:

Sub TransferData()

Dim main_wb As Workbook
Dim target_wb As Workbook

Application.ScreenUpdating = False

Set main_wb = Workbooks.Open("C:/Users/admin/Documents/Sample.xlsx")
main_sheet = "Sheet1"

Set target_wb = ThisWorkbook
target_sheet = "Sheet1"

main_wb.Sheets(main_sheet).Range("A1:I200").Copy
target_wb.Sheets(target_sheet).Range("A1").PasteSpecial xlPasteValues
Application.ScreenUpdating = True
End Sub

如何复制合并的单元格?谢谢你。

excel vba excel-2016
1个回答
0
投票

如果只想复制数据,则不要使用

Copy
PasteSpecial
,而是将数据读入二维数组并将数组数据写入目标。这将使目标的格式保持完整,包括合并区域。如果目标包含与源不同的合并区域,它不会抛出错误。

如果源和目的地具有相同的合并区域,则无论如何一切都很好(标记为绿色)。

如果源包含合并区域,而目标具有单个(未合并)单元格,则仅填充目标的第一个单元格(标记为黄色)。

如果源包含单个单元格,而目标具有合并数组,则复制第一个单元格的值(标记为红色)。

来源数据:
Source

目的地(副本后):
Destination

您的代码可能如下所示:

Dim sourceRange As Range, destRange As Range
Set sourceRange = main_wb.Sheets(main_sheet).Range("A1:I200")
Set destRange = target_wb.Sheets(target_sheet).Range("A1").Resize(sourceRange.Rows.Count, sourceRange.Columns.Count)

Dim data As Variant
data = sourceRange.Value
destRange.Value = data
© www.soinside.com 2019 - 2024. All rights reserved.