VBA宏未正确粘贴

时间:2014-11-17 21:15:50

标签: excel vba excel-vba

我创建了一个VB宏,它将来自2张纸的数据组合成一张纸,这样就可以打印出来并作为我们正在处理的项目的概述给出。

应该做什么(过去做过)是转到第1页,将A3中的所有数据复制到A列数据的最后一行的R中。

然后粘贴从组合工作表的A3开始的数据。

然后它以相同的方式从工作表2复制数据,并将其粘贴到组合工作表中最后一次使用的行之后。

我最近做了一些调整,现在宏似乎没有起作用。

它正确粘贴第一个工作表(精益项目),但第二个工作表的数据(Kaizen)没有正确复制。

它不是将所有数据复制到最终输入行,而是复制从第一个工作表中的行数开始的所有数据。 (例如:如果工作表1中有24个条目,则工作表2开始在第25行复制。

Sub CreateCombinedSheet()

'Assign the worksheets to their respective variables
Set wsCombined = Sheets("Combined (View)(Macro)")
Set wsProjects = Sheets("Lean Projects (View)")
Set wsKaizen = Sheets("Kaizen (View)")

'Clear the Combined worksheet before repopulating it if there is data present

'If the first cell of data, A3, is not empty
If wsCombined.Range("A3") <> "" Then

    'Then clear all rows after row 3 until the last row
    wsCombined.Range("A3", wsCombined.Range("A1048576").End(xlUp).Address).EntireRow.Delete

End If

'Copy all the data in the Lean Projects worksheet
wsProjects.Range("A3", wsProjects.Range("R3").End(xlDown).Address).Copy

'Paste the Lean Projects data into the Combined worksheet
wsCombined.Range("A3").PasteSpecial

'Copy all the data in the Kaizen worksheet
wsKaizen.Range("A3", wsKaizen.Range("R3").End(xlDown).Address).Copy

'Paste the Kaizen data into the Combined worksheet starting in the row after the currently last used row

wsCombined.Range("A" & wsCombined.Range("A" & Rows.Count).End(xlUp).Row + 1).PasteSpecial


End Sub

如果有人能告诉我哪里出错了,我会很感激帮助。

谢谢,

示例:enter image description here

更新11/18:

我注释掉了第二个粘贴功能,所以我可以准确地看到被复制的内容。我发现它正在从第二个工作表中复制正确的数据。当我将这些数据粘贴到组合工作表中的最后一行之后(第一张工作表的数据结束后)时出现问题。当我手动经过那里时,我会看到所有第二张表数据。然后一秒钟之后,它似乎向上折叠并且Im从第二张纸的第25行开始到最后一行(28),然后将纸张2上的公式进一步外推到组合纸张上的第50行。 / p>

2 个答案:

答案 0 :(得分:1)

更正(在我看来)

If wsCombined.Range("A3") > 0 Then

应该成为

IF wsCombined.Range("A3").Value <> "" Then

不要为End功能使用自定义功能。它是多余的,限制了你可以用它做什么。

wsCombined.Rows("3:" & LastRow(wsCombined)).ClearContents

应该成为

wsCombined.Range("A3",WSCombined.Range("A1048576").End(xlup).Address).EntireRow.Delete

另一个

wsProjects.Range("A3:" & "R" & LastRow(wsProjects)).Copy

应该成为

wsProjects.Range("A3",wSProject.Range("R3").End(xlDown).Address).Copy

等等。我将很快回到这个答案,但我想如果你删除自定义函数并使用内置功能,错误就会消失。

答案 1 :(得分:1)

尝试在每个xlPasteValues代码行

之后添加.PasteSpecial
wsCombined.Range("A3").PasteSpecial xlPasteValues

wsCombined.Range("A" & wsCombined.Range("A" & .Rows.Count).End(xlUp).Row + 1).PasteSpecial xlPasteValues