2015-11-04 48 views
1

我想根据列N中给出的标准将一系列单元格复制到另一个工作表。因此,对于每一行,都必须检查它是否满足列N中的标准。如果列N = 1中的值,它应该从该行Range(Cells(j, 1), Cells(j, 8))复制到另一个工作表,从第10行开始。如果列N = 0中的值跳过该行并检查下一行。所以它不会复制那一行。根据标准从一个工作表到另一个工作表的复制范围

也许我错了代码可以解释它比我好:

Sub TCoutput() 
    Dim i As New Worksheet 
    Dim e As New Worksheet 

    Set i = ActiveWorkbook.Worksheet.Item(3) 
    Set e = ActiveWorkbook.Worksheets.Item(4) 
    Dim d 
    Dim j 

    d = 10 
    j = 3 

    Do Until IsEmpty(i.Range("N" & j)) 

     If i.Range("N" & j) = "1" Then 
     d = d + 1 
      e.Range(Cells(d, 1), Cells(d, 8)) = i.Range(Cells(j, 1), Cells(j,8)) 
     End If 
     j = j + 1 
    Loop 
End Sub 
+0

你想用'Set i = ActiveWorkbook.Worksheet.Item(3)'做什么? – Jeeped

+0

我真的不知道,为了激活您正在处理的工作表,我看到了某处?因为我使用多个工作表。 – Jeroen

回答

0

试试这个。 Ive add .value and d = d + 1

Sub TCoutput() 
     Dim i As New Worksheet 
     Dim e As New Worksheet 

     Set i = ActiveWorkbook.Worksheets.Item(1) 
     Set e = ActiveWorkbook.Worksheets.Item(2) 
     Dim d 
     Dim j 

     d = 10 
     j = 3 

     Do Until IsEmpty(i.Range("N" & j)) 

      If i.Range("N" & j) = "1" Then 
       e.Range(e.Cells(d, 1), e.Cells(d, 8)).Value = i.Range(i.Cells(j, 1), i.Cells(j, 8)).Value 
       d = d + 1 
      End If 
      j = j + 1 
     Loop 
    End Sub 
+0

是的,它现在完美了!非常感谢。最后,我可以继续! – Jeroen

1

当使用多个电子表格,你必须要小心,并确保所有.Range.Cells参考包括要在工作表。第一件事首先,这个替换您的If声明:

If i.Range("N" & j) = "1" Then 
    e.Range(e.Cells(d, 1), e.Cells(d, 8)) = i.Range(i.Cells(j, 1), i.Cells(j,8)) 
End If 

或者,你可以使用With(我个人比较喜欢):

With i 
If .Range("N" & j) = "1" Then 
    e.Range(e.Cells(d,1),e.Cells(d,8)) = .Range(.Cells(j,1),.Cells(j,8)) 
End If 
End with 

没有明确提到一个工作表时,Cells()Range()将推迟到ActiveSheet

+0

谢谢你的反应。但仍然不起作用。现在我没有得到任何错误,但它仍然没有复制范围。我忘了添加d = d + 1 – Jeroen

+0

我发现了一些有用的东西,但是每当我运行宏时,excelfile就会变得越来越模糊,因为它会不断地选择2个工作表。我已经把代码放在上面了。所以我更喜欢用它来做它 – Jeroen

相关问题