宏从某些单元格复制单元格值,但不是从其他单元格复制

时间:2020-04-11 20:22:19

标签: excel vba

我一直在尝试制作一个宏,该宏将某些值从某些单元格复制到其他单元格。我有一些代码可以获取表中的下一行,然后将其复制单元格值并将其粘贴到表中。但是,这仅适用于我要复制的单元格的一半。它会复制并粘贴单元格B4和B5中的值,但不会粘贴F5和F7(请参见下文)

Sub YesTrade()
    Dim lastRow As Long
    Dim currentDate As String

    currentDate = Date
    lastRow = Worksheets("Trades").Cells(Rows.Count, 1).End(xlUp).Row
    Worksheets("Trades").Cells(lastRow + 1, 1).Value = Date

    Worksheets("Calculator").Range("B4").Copy Worksheets("Trades").Cells(lastRow + 1, 2)
    Worksheets("Calculator").Range("B5").Copy Worksheets("Trades").Cells(lastRow + 1, 3)
    Worksheets("Calculator").Range("F5").Copy Worksheets("Trades").Cells(lastRow + 1, 4)
    Worksheets("Calculator").Range("F7").Copy Worksheets("Trades").Cells(lastRow + 1, 5)
End Sub

3 个答案:

答案 0 :(得分:1)

为什么不使用.Value对象的简单Range属性?

Worksheets("Trades").Cells(lastRow + 1, 2).Value = Worksheets("Calculator").Range("B4").Value
Worksheets("Trades").Cells(lastRow + 1, 3).Value = Worksheets("Calculator").Range("B5").Value
Worksheets("Trades").Cells(lastRow + 1, 4).Value = Worksheets("Calculator").Range("F5").Value
Worksheets("Trades").Cells(lastRow + 1, 5).Value = Worksheets("Calculator").Range("F7").Value

答案 1 :(得分:0)

我建议使用PasteSpecial或Destination。这是PasteSpecial的一个示例,该示例仅复制和粘贴值:

   'Copy values
   Worksheets("Calculator").Range("F5").Copy
   'Paste Values with PasteSpecial
   Worksheets("Trades").Cells(lastRow + 1, 4).PasteSpecial Paste:=xlPasteValues

带有目的地的示例:

   'Copy values
   Worksheets("Calculator").Range("F5").Copy Destination:=Worksheets("Trades").Cells(lastRow + 1, 4)

希望这可以帮助您解决问题。如果没有,请提供有关单元格中值的更多信息。

答案 2 :(得分:0)

我想您的问题是您正在复制/粘贴一些在目标表中会产生零的公式

然后您可以遵循MichałTurczyn的建议(使用Value属性),并使用With ...End With语法缩短代码

Sub YesTrade()
    Worksheets("Trades").Cells(Rows.Count, 1).End(xlUp).Offset(1).Value = Date
    With Worksheets("Calculator")
        Worksheets("Trades").Cells(Rows.Count, 1).End(xlUp).Offset(, 1).Resize(, 4).Value = Array(.Range("B4"), .Range("B5"), .Range("F5"), .Range("F7"))
    End With
End Sub

,或者以(可能)更具可读性的方式:

Sub YesTrade()
    Worksheets("Trades").Cells(Rows.Count, 1).End(xlUp).Offset(1).Value = Date
    With Worksheets("Calculator")
        Worksheets("Trades").Cells(Rows.Count, 1).End(xlUp).Offset(, 1).Resize(, 4).Value = Array(.Range("B4"), _
                                                                                                  .Range("B5"), _
                                                                                                  .Range("F5"), _
                                                                                                  .Range("F7"))
    End With
End Sub