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
我正在尝试创建一个宏来将数据从 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