我正在做一个宏来将整个列从一个工作表复制到另一个工作表中从第2行开始的另一个列。但是我不认为它有效,Set des = Sheets(3).Range("P2:P" & Rows(i))
这就是行导致错误。
Sub Sample()
Dim lastRow As Long, i As Long
Dim CopyRange As Range
Dim rw As Range
Dim rw1 As Range
Dim rw2 As Range
Dim rw3 As Range
Dim des As Range
Dim des1 As Range
Dim des2 As Range
Dim des3 As Range
'~~> Change Sheet1 to relevant sheet name
With Sheets(1)
lastRow = .Range("A" & .Rows.Count).End(xlUp).row
For i = 2 To lastRow
If Len(Trim(.Range("A" & i).Value)) <> 0 Then
If CopyRange Is Nothing Then
Set CopyRange = .Rows(i)
Else
Set CopyRange = Union(CopyRange, .Rows(i))
Set rw = .Columns(16)
Set rw1 = .Columns(23)
Set rw2 = .Columns(3)
Set rw3 = .Columns(18)
End If
End If
Next
If Not CopyRange Is Nothing Then
Set des = Sheets(3).Range("P2:P" & Rows(i))
Set des1 = Sheets(3).Columns("R")
Set des2 = Sheets(3).Columns("T")
Set des3 = Sheets(3).Columns("U")
'~~> Change Sheet2 to relevant sheet name
rw.Copy des
rw1.Copy des1
rw2.Copy des2
rw3.Copy des3
Application.CutCopyMode = False
End If
End With
End Sub
答案 0 :(得分:1)
您需要将复制的列更改为范围,以便正确粘贴它们,如下所示:
Sheets(1).Range("A1:A" & Sheets(1).Cells(Sheets(1).Rows.Count, "a").End(xlUp).Row).Copy ' this code copies from first to last cell with data in column A
然后你需要用例如它们粘贴它们。
sheets(3).range("R2").paste
答案 1 :(得分:0)
抱歉,我没有足够的帖子直接评论KKowalczyk的回答。
因为你循环遍历所有For循环,因此在你设置des范围时,i = lastrow + 1.ds范围将从P2到P-(lastrow + 1)
同时,rw范围从A2到A-lastrow。
因此2范围的大小是不同的。您应该将代码更改为:
Set des = Sheets(3).Range("P2:P" & Rows(i-1))