我是VBA的新手,我试图在需要从6张工作表中提取选定单元格并将其合并到另一个工作表中的过程中自动执行一个过程。代码我有作品,但有点“笨重” - 我使用Excel的复制和粘贴功能,但似乎无法找到一个好的解决方案远离复制和粘贴功能。当我尝试添加一个粘贴特殊功能时,出现1004错误。爱建议优化这个!Excel VBA:将单元格从多个工作表复制到一张工作表
对于要复制的每个工作表,单元格在第一列中用“1”,“0”或空白标记 - 如果单元格为“1”或“0”,我复制行中的其他单元格到合并表。行之间有一些空白,所以我选择使用For-Loop而不是Do-While语句。
我已经把它贴的代码如下:
Sub TEST()
Dim i As Integer 'copying row counter for each sheet to be copied
Dim j As Integer 'pasting row counter in consolidated sheet
Dim cal(1 To 6) As String 'copied sheetname
cal(1) = "Picks"
cal(2) = "Eats"
cal(3) = "Night Out"
cal(4) = "Active"
cal(5) = "Family"
cal(6) = "Arts"
Dim x As Integer
Dim y As Integer 'column for date
Dim z As Integer 'max row to run till
y = 1 'column checked in each sheet where condition for copying is met
z = 300 'number of rows to check in each sheet
j = 1
For x = 1 To 6
For i = 1 To z
If Sheets(cal(x)).Cells(i, y) = "0" Or Sheets(cal(x)).Cells(i, y) = "1" Then
Sheets(cal(x)).Select
Range(Sheets(cal(x)).Cells(i, 2), Sheets(cal(x)).Cells(i, 10)).Select
Selection.Copy
Application.Goto ActiveWorkbook.Sheets(Consolidated).Cells(j, 1)
ActiveSheet.Paste
Else
j = j - 1
End If
j = j + 1
Next i
Next x
End Sub
我又很想优化这段代码,使用另一种方法,而不是复制和粘贴的。我也尝试过:
Application.Goto ActiveWorkbook.Sheets(Consolidated).Cells(j, 1)
ActiveSheet.PasteSpecial Operation:=xlPasteValues
这导致了1004错误。想知道哪里出了问题。
小心使用您的预期输出更新您的问题? :)如果无法使用屏幕截图进行更新,请添加输出的文本视图。我假设你想在最终的工作表中获得枢轴/子总计有点视图。那是对的吗? – bonCodigo
如果你想远离复制粘贴和insted拿这些机器资源来实现使用更有效的VBA代码片段的结果:请看看[一些示例在这里](http://stackoverflow.com/questions/13528333/how-to-search-and-extract-certain-values-in-cells-vba/13530138#13530138)该示例并不意味着您的确切要求。但是要给你一个关于你的执行有更多优化视角的想法:) – bonCodigo
@bonCodigo对不起,回复迟了!我没有足够的声望发布图片。输入表格有一组格式,当我将它们粘贴到输出中时,我希望更改它们,我该如何做到最好?它会是一个没有格式化的pastespecial,然后以某种方式在格式上分层? – wasabigeek