簡體   English   中英

VBA 錯誤 1004:范圍 class 的復制方法失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM