【发布时间】:2015-01-30 00:52:29
【问题描述】:
我创建了一个 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
如果有人能告诉我哪里出错了,我将不胜感激。
谢谢,
示例:
11/18 更新:
我注释掉了第二个粘贴功能,这样我就可以准确地看到正在复制的内容。我发现它正在从第二个工作表中复制正确的数据。当我将该数据粘贴到组合工作表中的最后一行之后(在第一张工作表的数据结束之后)时,问题就出现了。当我手动经过那里时,我会看到所有第二张工作表数据。然后一秒钟后,它似乎向上折叠,我留下了从第二张工作表的第 25 行开始到最后一行 (28) 的数据,然后将工作表 2 上的公式进一步外推到组合工作表上的第 50 行。
【问题讨论】:
-
您是否使用
Dim定义了任何变量? -
我使用了“Set”,这样做效果很好。我需要使用 Dim 代替吗?
-
有时可以纠正问题。
Dim wsCombined, wsProjects, wsKaizen, wsSheet As Sheet然后删除所有Set(这些是单独的行) -
我尝试使用 Dim 设置它们,例如 'Dim wsCombined as Worksheet wsComined = Sheets("Combined (View)(Macro)")' 这给了我一个运行时错误 91:对象变量或未设置块变量
-
Dim wsCombined As Worksheet需要与wsCombined = blah分开一行