VBA宏粘贴不正确

VBA宏粘贴不正确,vba,excel,Vba,Excel,我创建了一个VB宏,它将两张表中的数据合并到一张表中,这样就可以打印出来,并作为我们正在进行的项目的概述 它应该做的(过去也做过)是转到第1页,将A列中有数据的最后一行的A3中的所有数据复制到R中 然后从组合工作表的A3开始粘贴该数据 然后,它以相同的方式从工作表2中复制数据,并将其粘贴到组合工作表中最后使用的行之后 我最近做了一些调整,现在宏似乎不起作用了 它正确粘贴第一个工作表(精益项目),但第二个工作表的数据(改善)复制不正确 它不是将所有数据向下复制到最后一个输入行,而是复制第一个工作表

我创建了一个VB宏,它将两张表中的数据合并到一张表中,这样就可以打印出来,并作为我们正在进行的项目的概述

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

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

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

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

它正确粘贴第一个工作表(精益项目),但第二个工作表的数据(改善)复制不正确

它不是将所有数据向下复制到最后一个输入行,而是复制第一个工作表中行数之后开始的所有数据。(示例:如果工作表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
Sub-CreateCombinedSheet()
'将工作表分配给各自的变量
设置wsCombined=图纸(“组合(视图)(宏)”)
设置wsProjects=Sheets(“精益项目(视图)”)
设置wsKaizen=Sheets(“Kaizen(视图)”)
'如果存在数据,则在重新填充组合工作表之前清除该工作表
'如果数据的第一个单元格A3不为空
如果wsCombined.Range(“A3”)“”则
'然后清除第3行之后的所有行,直到最后一行
wsCombined.Range(“A3”,wsCombined.Range(“A1048576”).End(xlUp.Address).EntireRow.Delete
如果结束
'复制精益项目工作表中的所有数据
wsProjects.Range(“A3”,wsProjects.Range(“R3”).End(xlDown).Address)。复制
'将精益项目数据粘贴到组合工作表中
wsCombined.Range(“A3”).PasteSpecial
'复制改善工作表中的所有数据
wsKaizen.Range(“A3”,wsKaizen.Range(“R3”).End(xlDown).Address)。复制
'将改善数据粘贴到组合工作表中,从当前最后使用的行之后的行开始
wsCombined.Range(“A”和wsCombined.Range(“A”和Rows.Count).End(xlUp).Row+1).PasteSpecial
端接头
如果有人能告诉我哪里出了错,我会感谢你的帮助

谢谢

例如:

更新11/18:

我注释掉了第二个粘贴函数,以便自己能够准确地看到所复制的内容。我发现它正在从第二个工作表复制正确的数据。当我将该数据粘贴到组合工作表的最后一行之后(在第一个工作表的数据结束之后)时,问题就出现了。当我手动经过那里时,我看到了所有第二张工作表的数据。然后一秒钟后,它似乎向上塌陷,我留下了从第二张工作表第25行开始到最后一行(28)的数据,然后将工作表2上的公式进一步外推到组合工作表上的第50行。

更正(在我看来)

应该成为

IF wsCombined.Range("A3").Value <> "" Then
wsProjects.Range("A3",wSProject.Range("R3").End(xlDown).Address).Copy
应该成为

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

wsProjects.Range("A3:" & "R" & LastRow(wsProjects)).Copy
应该成为

IF wsCombined.Range("A3").Value <> "" Then
wsProjects.Range("A3",wSProject.Range("R3").End(xlDown).Address).Copy

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

尝试在每个
.PasteSpecial
代码行之后添加
xlPasteValues

wsCombined.Range("A3").PasteSpecial xlPasteValues


您是否使用
Dim
定义了任何变量?我使用了“Set”,这样做效果很好。我需要使用Dim吗?有时这可以纠正问题。
Dim wsCombined、wsProjects、wsKaizen、wsSheet As Sheet
然后删除所有
Set
(这些是单独的行)我尝试将它们设置为Dim,如“Dim wsCombined as WORKEM wsComined=Sheets”(“组合(视图)(宏)”)'这给了我一个运行时错误91:对象变量或With block变量未设置
Dim WSCOMPONED As WORKEM
需要与
WSCOMPONED=blah
分开一行,我做了这些更正,但仍然返回到同一问题。它复制并粘贴了第一部分的右侧。但是第二个工作表没有显示出来已正确复制/粘贴到组合的sheetwsCombined.Range(“A”&(LastRow(wsCombined)+1)).PasteSpecial<您更改了此行吗?啊,没有,我忘了修改那一行。我现在正在尝试找出更改该行的语法。它类似于wsCombined.Range(wsCombined.End(xlDown.Address)+1).PasteSpecial。我知道这是不正确的,我很难理解如何构造它。它需要在使用的最后一行
wsCombined.Range(“A”和wsCombined.Range(“A”和.Rows.Count)。End(xlUp)。row+1)之后开始粘贴该行.PasteSpecial
谢谢。我更新了那一行,但仍然遇到同样的问题。我正在试图弄清楚如何上载有问题的文件。实际上,我正准备在这一方面进行更新。问题似乎源于粘贴条件格式。如果我添加“粘贴:=xlPasteValues”然后宏可以正常工作。如果我只是保持原样或添加“粘贴:=xlAllMergingConditionalFormats”,然后它返回到上面描述的奇怪的事情。我如何让它保持条件格式,而不会像现在这样乱七八糟?您可以在宏中的新工作表上设置条件格式。我相信条件格式与给定工作表中的特定范围或单元格相关联。好的,我找到了解决方法。我设置了组合工作表中列的条件格式应该相同,因为条件格式应该是相同的,不应该放在任何地方。然后我将两个粘贴都设置为值。这只会提供数据(因此我不会得到任何奇怪的粘贴),工作表上已有的格式会适当地为数据着色。
wsCombined.Range("A" & wsCombined.Range("A" & .Rows.Count).End(xlUp).Row + 1).PasteSpecial xlPasteValues