2012-07-10 142 views
0

我有这个脚本,我已经帮忙了,但现在出现问题。我试图粘贴只有值,而不是在单元格内的公式到另一个单元格。只粘贴值,Excel VBA

我认为将.Value放在公式的末尾会告诉脚本只粘贴值......它似乎不是。有人可以给我一个关于如何做这项工作的建议吗?

Option Explicit 

    Sub ONJL() 
     Dim lastrow As Long 
     Dim wsPAR As Worksheet 'PAERTO 
     Dim wsRD As Worksheet 'Raw Data 
     Dim wsTEM As Worksheet 'Archive 

     Set wsPAR = Sheets("PAERTO") 
     Set wsRD = Sheets("Raw Data") 
     Set wsTEM = Sheets("Template") 


     With wsRD 
      Application.ScreenUpdating = False 
      lastrow = .Range("J" & .Rows.Count).End(xlUp).Row 
      wsRD.Range("J" & lastrow + 1).Formula = Date 
      wsRD.Range("B2").Copy wsRD.Range("K" & lastrow + 1).Value 
      wsRD.Range("B3").Copy wsRD.Range("L" & lastrow + 1).Value 
      wsRD.Range("E2").Copy wsRD.Range("M" & lastrow + 1).Value 
      wsRD.Range("E3").Copy wsRD.Range("N" & lastrow + 1).Value 
      wsRD.Range("H2").Copy wsRD.Range("O" & lastrow + 1).Value 
      wsRD.Range("H3").Copy wsRD.Range("P" & lastrow + 1).Value 
      wsRD.Range("Q1:T1").Copy wsRD.Range("Q" & lastrow + 1) 
      Application.ScreenUpdating = False 
     End With 
    End Sub 
+0

根据您以前的问题及其答案,由于代码位于'With'块中,因此您应该从'With'块中的每个语句中删除'wsRD'引用。 – JimmyPena 2012-07-10 12:47:30

回答

5

可以“复制”实际上并没有使用.Copy这样的:

Sub CopyWithoutCopying() 
    Dim wsRD As Worksheet 
    Dim lastrow As Long 

    Set wsRD = Sheets("Raw Data") 

    With wsRD 
     lastrow = .Range("J" & .Rows.Count).End(xlUp).Row 
     .Range("K" & lastrow + 1).Value = .Range("B2").Value 
     .Range("L" & lastrow + 1).Value = .Range("B3").Value 
     ' etc... 
    End With 
End Sub 

这种方法不使用剪贴板,性能更好,并且不选择任何内容。正如Jimmy指出的那样,您不需要With区块内的wsRD前缀。

+2

+1,但由于代码位于With Block内,因此不需要语句的'wsRD'部分。 – JimmyPena 2012-07-10 12:40:01

+0

好点。我编辑了我的答案。 – 2012-07-10 12:49:18

+0

感谢这两个人,我只是把wsRD当成冗余来做,我知道如果我把它拿出来也没有关系,但这只是我学到的方式...更多的是事实,以防万一的情况;) – 2012-07-10 13:14:41