有人能告诉我为什么我会在以下代码中收到1004错误吗?
如果不清楚,我正在尝试循环所有不是我命名工作表的工作表并尝试选择特定范围并将其复制并粘贴到已编译的“Quant Sheet”
Dim ws As Worksheet
Dim x As Integer
Dim y As Integer
Dim a As Integer
Dim b As Integer
Set ws = Worksheets("Quant Sheet")
x = 1
y = 3
a = 3
b = 2
Worksheets("Quant Sheet").Activate
For Each ws In ActiveWorkbook.Worksheets
If (ws.Name <> "Quant Sheet") Then
ws.Range("A3").Select
Selection.Copy
Sheets("Quant Sheet").Select
Cells(y, 1).Select
ActiveSheet.Paste
y = y + 1
End If
Next ws
答案 0 :(得分:6)
您将WS
设置为Worksheets("Quant Sheet")
,然后使用相同的变量ws
在您的循环中使用。这可能导致了这个问题。
试试这个:
Dim ws As Worksheet, mainWS As Worksheet
Dim x As Integer, y As Integer, a As Integer, b As Integer
Set mainWS = Worksheets("Quant Sheet")
x = 1
y = 3
a = 3
b = 2
For Each ws In ActiveWorkbook.Worksheets
If (ws.Name <> "Quant Sheet") Then
ws.Range("A3").Copy Destination:=mainWS.Cells(y, 1)
y = y + 1
End If
Next ws
主要是,您希望avoid using .Select
/.Activate
确保您更直接地处理数据。
编辑:仅供参考,你可以通过不使用像y=y+1
之类的东西来进一步提高动态,而是使用偏移量或lastRow
变量,但这是个人偏好,因为它会完成同样的事情。 (我还假设x
,a
和b
变量在宏的其他位置使用...
答案 1 :(得分:3)
As was already stated,您无法.Select
工作表中的某个单元格,而您尚未首先调用.Activate
- 将修复这个问题,但让你身体虚弱到处都有.Select
和.Activate
个来电。相反,使用Worksheets
循环迭代For Each
集合,因此您可以获得Worksheet
对象来处理每次迭代:
Sub test()
Dim quantSheet As Worksheet, tempSheet as Worksheet
Dim i As Integer
Set quantSheet = ThisWorkbook.Worksheets("Quant Sheet")
i = 3
For Each tempSheet In ThisWorkbook.Worksheets
If tempSheet.Name <> quantSheet.Name Then
quantSheet.Cells(i, 1).Value = tempSheet.Range("A3").Value
i = i + 1
End If
Next tempSheet
End Sub
除了已经提供的好答案和评论之外,您还可以充分利用代码。
.Value
直接设置您的值。它更快更好Select
和Activate
,正如已经指出的那样。其中包括ActiveSheet
和ActiveWorkbook
在Code Review Stack Exchange上发布您的工作代码,以便进行全面的同行评审。