2017-08-03 121 views
0

我有这张工作表Consulta其中每当我改变列K上的值,它将范围E:K的颜色更改为绿色或白色,如果它是空的。vba复制到不同的范围

我也想要如果该行是绿色的,将该行复制到名为E-mail的工作表。这是我到目前为止已经试过和它的作品:

Sub ChangeColor() 
Dim ws As Worksheet, ws1 As Worksheet, i As Long, lastrow As Long 

Set ws = Sheets("Consulta") 
Set ws1 = Sheets("E-mail") 

lastrow = ws.Cells(Rows.Count, "E").End(xlUp).Row 


For i = 5 To lastrow 
If ws.Range("K" & i) <> "" Then 
    ws.Range("E" & i & ":K" & i).Interior.ColorIndex = 43 
    ws.Range("E" & i & ":K" & i).Copy ws1.Range("A" & i & ":G" & i) 
Else 
    ws.Range("E" & i & ":K" & i).Interior.ColorIndex = 2 
End If 
Next 

If ws.Range("E" & i & ":K" & i).Interior.ColorIndex = 2 Then 
    ws1.Range("A" & i & ":G" & i).Clear 
End If 
End Sub 

我的问题是下面这行:

ws.Range("E" & i & ":K" & i).Copy ws1.Range("A" & i & ":G" & i) 

其实我是想在复制到不同的范围,而不是相应的范围表格E-mail(例如,如果第一个匹配是E3:K3我想复制到A2:K2,如果第二个匹配是E34:K34我想将它复制到A3:K3,所以它会继续)。

我试过使用另一个循环,但我的Excel变得疯狂,所以我认为我做错了。

任何建议,将不胜感激。

回答

3

您只需要目标的左上角单元格。从下往上看最后使用的单元格并向下偏移一行。

with ws1 
    ws.Range("E" & i & ":K" & i).Copy .cells(.rows.count, "A").end(xlup).offset(1, 0) 
end with 

您可能希望将其放在应用填充颜色的上方,否则您也将复制填充颜色。

+0

就是这样!非常感谢,我完全忘记了'Offset'。你对颜色是正确的。 – paulinhax

+0

我意识到这只是当我的颜色与我'清除'搞砸了,但我会尽力解决这个问题。 – paulinhax