excel VBA 中的范围不正确

Range is not correct in excel VBA

我正在尝试创建一个宏来将数据从 excel 复制到另一个 excel(模板 - .xltx)。

所以我写了一个代码:

Option Explicit

Sub GenerujD5()

Dim xWb As Workbook
Dim path As String
Dim wsCopy As Worksheet
Dim wsDest As Worksheet
Dim copylastrow As Long
Dim pasterow As Long

path = "C:\pc2\export\export.xls"

Set wsCopy = Workbooks.Open(path).Worksheets("export")
Set wsDest = ThisWorkbook.ActiveSheet

copylastrow  = wsCopy.Cells(wsCopy.Rows.Count, "A").End(xlUp).Row
pasterow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1).Row

wsCopy.Range("A2:M" & copylastrow).Copy
wsDest.Range("A5" & pasterow).PasteSpecial xlValues

End Sub

我的问题:

正在复制数据,但没有复制到正确的单元格中。模板有 4 行,所以我必须将它们复制到第 5 行。但是它复制到第 55 行。

您从目标 sheet 计算出第一个空闲行并将其写入变量 pasterow。假设您的目的地 sheet 有四行已填充,这将是 5.

稍后你写wsDest.Range("A5" & pasterow).PasteSpecial xlValues。现在 VBA 将连接字符串 "A5" 和变量 pasterow 的内容,这与 "A5" & 5" 相同,结果将是 "A55"

如果您确定总是填充四行,则可以去掉变量 pasterow 并简单地写

wsDest.Range("A5").PasteSpecial xlValues

但更好的尝试是使用它并编写

wsDest.Range("A" & pasterow).PasteSpecial xlValues

作为替代,您也可以写

wsDest.Cells(pasterow, 1).PasteSpecial xlValues

wsDest.Cells(pasterow, "A").PasteSpecial xlValues