[英]Excel VBA Runtime Error 1004 - "Autofill Method of Range Class Failed”
[英]VBA Error 1004: Copy method of range class failed
我目前使用的任何粘貼方法都有點麻煩。 我必須從一張表中復制數據並將其粘貼到另一張表中,但我不確定我錯過了什么。
Dim idSelect As Integer
Dim nRow As Integer
Dim i As Integer
Dim rowNum As Integer
idSelect = Worksheets("dest").Range("C2").Value - 1
rowNum = 5
nRow = Worksheets("origin").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To nRow
If Worksheets("origin").Cells(i, 1).Value = "No" Then 'if do not ignore
If idSelect > 0 And (Left(Worksheets("origin").Cells(i, 6).Value, 1) Or Left(Worksheets("origin").Cells(i, 7).Value, 1) = idSelect) Then
Range(Worksheets("origin").Cells(i, 3), Worksheets("origin").Cells(i, 27)).Copy
Worksheets("dest").Range(Cells(rowNum, 1)).PasteSpecial Paste:=xlPasteValues
rowNum = rowNum + 1
End If
End If
Next i
Application.CutCopyMode = False
Range
, Cells
, Rows
, Columns
都是范圍。 范圍屬於工作表,您需要告訴 VBA 它應該使用哪個工作表。 如果您不告訴, VBA 假定為Activesheet
。
Worksheets("dest").Range(Cells(rowNum, 1))
告訴 VBA 您要使用工作表dest
中的 Range 。 然后,您想使用Cells(rowNum, 1))
指定您需要工作表的哪一部分。 但是,您不會告訴 VBA 您想要Cells
來自哪個工作表,雖然對於人類來說您想要工作表dest
中的單元格似乎很明顯,但事實並非如此。 VBA 將假定Activesheet.Cells(rowNum, 1)
,並且由於該單元格不是工作表dest
的一部分,因此您會收到運行時錯誤。
所以正確的方法是(等等,不要使用它)
Worksheets("dest").Range(Worksheets("dest").Cells(rowNum, 1)).PasteSpecial
因為這是一個怪物,所以有捷徑。 使用With
-Clause 或將工作表分配給變量(等等,它仍然變得更容易)
' Either
With Worksheets("dest")
.Range(.Cells(rowNum, 1)).PasteSpecial
End With
' --- Or
Dim destSheet As Worksheet
Set destSheet = Worksheets("dest")
destSheet.Range(destSheet.Cells(rowNum, 1)).PasteSpecial
現在,在頂部我說Cells
是范圍。 Cells(rowNum, 1)
是一個 Range(包含一個單元格)。 你可以簡單地使用
Worksheets("dest").Cells(rowNum, 1).PasteSpecial
' --- Or
With Worksheets("dest")
.Cells(rowNum, 1).PasteSpecial
End With
' --- Or
Dim destSheet As Worksheet
Set destSheet = Worksheets("dest")
destSheet.Cells(rowNum, 1).PasteSpecial
...現在您需要學習的下一件事是您需要告訴 VBA 它應該在哪個 Workbook 中查找Worksheets
- 否則它假定為ActiveWorkbook
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.