如何解决由 .PasteSpecial 引起的编译错误?
How to solve this Compile error caused by a .PasteSpecial?
我正在努力解决以下问题,但无法使代码正常工作。
Sub Copy_Paste_Below_Last_Cell()
'Find the last used row in both sheets and copy and paste data below existing data.
Dim wsCopy As Worksheet
Dim wsDest As Worksheet
Dim lCopyLastRow As Long
Dim lDestLastRow As Long
'Set variables for copy and destination sheets
Set wsCopy = ThisWorkbook.Worksheets("Data")
Set wsDest = Workbooks("Data.xlsx").Worksheets("DB")
'1. Find last used row in the copy range based on data in column A
lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "A").End(xlUp).Row
'2. Find first blank row in the destination range based on data in column A
'Offset property moves down 1 row
lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1).Row
'3. Copy & Paste Data
wsCopy.Range("A2:H" & lCopyLastRow).Copy _
wsDest.Range("A" & lDestLastRow).PasteSpecial xlPasteValues
End Sub
问题出现在最后一行。如果不添加 PasteSpecial xlPasteValues,脚本运行完美。然而,当它从一个大的 sheet 中拉出时,其中包含公式的行,目标 sheet 会充满带有公式的空行。当我用新数据重新运行脚本时,它会查找最新的空行,但由于公式的原因,这比实际数据少了好几行。
可视化:
Data Row 1
Data Row2
Formula row
Formula row
Empty row
运行 2
Data Row 1
Data Row2
Formula row
Formula row
Data Row 3
Formula Row
我怀疑是因为 Copy 和 PasteSpecial 方法在同一行。试试下面的方法,它应该有效。
Sub Copy_Paste_Below_Last_Cell()
'Find the last used row in both sheets and copy and paste data below existing data.
Dim wsCopy As Worksheet
Dim wsDest As Worksheet
Dim lCopyLastRow As Long
Dim lDestLastRow As Long
'Set variables for copy and destination sheets
Set wsCopy = ThisWorkbook.Worksheets("Data")
Set wsDest = Workbooks("Data.xlsx").Worksheets("DB")
'1. Find last used row in the copy range based on data in column A
lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "A").End(xlUp).Row
'2. Find first blank row in the destination range based on data in column A
'Offset property moves down 1 row
lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1).Row
'3. Copy & Paste Data
wsCopy.Range("A2:H" & lCopyLastRow).Copy
wsDest.Range("A" & lDestLastRow).PasteSpecial xlPasteValues
Application.CutCopyMode = False
End Sub
已添加 Application.CutCopyMode = False
以在执行复制粘贴后清除剪贴板。
我正在努力解决以下问题,但无法使代码正常工作。
Sub Copy_Paste_Below_Last_Cell()
'Find the last used row in both sheets and copy and paste data below existing data.
Dim wsCopy As Worksheet
Dim wsDest As Worksheet
Dim lCopyLastRow As Long
Dim lDestLastRow As Long
'Set variables for copy and destination sheets
Set wsCopy = ThisWorkbook.Worksheets("Data")
Set wsDest = Workbooks("Data.xlsx").Worksheets("DB")
'1. Find last used row in the copy range based on data in column A
lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "A").End(xlUp).Row
'2. Find first blank row in the destination range based on data in column A
'Offset property moves down 1 row
lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1).Row
'3. Copy & Paste Data
wsCopy.Range("A2:H" & lCopyLastRow).Copy _
wsDest.Range("A" & lDestLastRow).PasteSpecial xlPasteValues
End Sub
问题出现在最后一行。如果不添加 PasteSpecial xlPasteValues,脚本运行完美。然而,当它从一个大的 sheet 中拉出时,其中包含公式的行,目标 sheet 会充满带有公式的空行。当我用新数据重新运行脚本时,它会查找最新的空行,但由于公式的原因,这比实际数据少了好几行。
可视化:
Data Row 1
Data Row2
Formula row
Formula row
Empty row
运行 2
Data Row 1
Data Row2
Formula row
Formula row
Data Row 3
Formula Row
我怀疑是因为 Copy 和 PasteSpecial 方法在同一行。试试下面的方法,它应该有效。
Sub Copy_Paste_Below_Last_Cell()
'Find the last used row in both sheets and copy and paste data below existing data.
Dim wsCopy As Worksheet
Dim wsDest As Worksheet
Dim lCopyLastRow As Long
Dim lDestLastRow As Long
'Set variables for copy and destination sheets
Set wsCopy = ThisWorkbook.Worksheets("Data")
Set wsDest = Workbooks("Data.xlsx").Worksheets("DB")
'1. Find last used row in the copy range based on data in column A
lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "A").End(xlUp).Row
'2. Find first blank row in the destination range based on data in column A
'Offset property moves down 1 row
lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1).Row
'3. Copy & Paste Data
wsCopy.Range("A2:H" & lCopyLastRow).Copy
wsDest.Range("A" & lDestLastRow).PasteSpecial xlPasteValues
Application.CutCopyMode = False
End Sub
已添加 Application.CutCopyMode = False
以在执行复制粘贴后清除剪贴板。