我对VBA非常陌生,并试图在工作中自动化一个过程,在那里,我需要从6个工作表数组中提取选定的单元格,并将它们合并到另一个工作表中。我的代码工作,但有点“笨重”-我使用的excel复制和粘贴功能,但似乎找不到一个好的解决方案,远离复制和粘贴功能。当我尝试添加一个粘贴特殊函数时,我会得到一个1004错误。会喜欢在优化这方面的建议!
对于要复制的每个工作表,单元格在第一列中标记为"1“、"0”或留空--如果单元格为"1“或"0",则将行中的其他单元格复制到合并页。行之间存在一些空白,所以我选择使用For-循环而不是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错误。想知道到底出了什么问题。
发布于 2012-11-27 08:43:45
您得到错误的原因是您试图粘贴到激活表中,而不是粘贴到活动表上的某个范围中,并且您对PasteSpecial
方法有错误的参数。
虽然这并不是您想要做的,但这是可行的:(更好的选择请参见下面的CopyWithoutClipboard
)
Sub PasteIntoGoto()
Sheets("sheet1").Range("A1").Copy
Application.Goto ActiveWorkbook.Sheets("Sheet3").Cells(1, 1)
ActiveSheet.Cells(1, 1).PasteSpecial Paste:=xlPasteValues
End Sub
注意ActiveSheet
和PasteSpecial
与Paste:=
之间插入的范围,而不是Operation:=
。
你想优化你的代码是对的。也许Excel开发中最重要的指导方针是不要选择任何,这会导致各种问题。在第一个示例中,您显式地使用了.Select
,在第二个示例中,.GoTo
实际上是在做同样的事情。
与选择工作表、复制范围、选择另一个工作表和粘贴到另一个范围不同,您可以将数据的副本写入目标范围(在同一工作表上或在另一个工作表上),如下所示:
Sub CopyWithoutClipboard()
Sheets("sheet1").Range("A1").Copy Sheets("sheet2").Range("A1")
End Sub
显然,您可以使用变量来代替上面代码片段中的硬编码对象。
https://stackoverflow.com/questions/13588637
复制