仅粘贴值,Excel VBA

仅粘贴值,Excel VBA,vba,excel,Vba,Excel,我有这个脚本,我已经有帮助,但现在来了一个问题。我试图将单元格中的值而不是公式粘贴到另一个单元格中 我认为将.Value放在公式末尾会告诉脚本只粘贴值。。。似乎不是。有人能给我一个关于如何使这项工作的建议吗 Option Explicit Sub ONJL() Dim lastrow As Long Dim wsPAR As Worksheet 'PAERTO Dim wsRD As Worksheet 'Raw Data

我有这个脚本,我已经有帮助,但现在来了一个问题。我试图将单元格中的值而不是公式粘贴到另一个单元格中

我认为将.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
您可以在不实际使用
的情况下“复制”。复制
如下:

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前缀。

您可以在不实际使用
的情况下“复制”。复制
如下:

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前缀。

+1但是由于代码在With块中,所以不需要语句的
wsRD
部分。由于这两个原因,我只需要将wsRD作为冗余,我知道是否将其取出并不重要,但这正是我学习的方式。。。更多的事实是以防万一;)
我知道我是否取出它并不重要
从技术上讲,这并不重要,但我可以很容易地看到这种方法会导致形成编码习惯,从而更难发现错误。+1但由于代码位于With块中,您不需要语句的
wsRD
部分。多亏了这两种方法,我只是把wsRD作为一种冗余,我知道我是否去掉它并不重要,但这只是我学习的方式。。。更多的事实是以防万一;)
我知道我是否取出它并不重要
从技术上讲,这并不重要,但我可以很容易地看到这种方法导致了编码习惯的形成,这使得识别错误变得更加困难。根据您之前的问题和答案,因为代码位于带有
块中,您应该从
With
块中的每条语句中删除
wsRD
引用。根据您之前的问题及其答案,由于代码位于
With
块中,因此您应该从
With
块中的每条语句中删除
wsRD
引用。