Excel VBA剪切或复制并粘贴单元格的更改

时间:2016-05-27 07:33:02

标签: excel excel-vba vba

我正在建立一个库存系统。我想要的是在日期发生变化时将期末股票复制到开仓股票栏,而收盘股票保持其公式只是将价值复制到开仓股票。

日期在单元格“AF1”中,今日日期公式=今天() 关闭股票在AB2栏:AB75,公式(开仓股票 - 卖出=收盘股票)

Private Sub Worksheet_Change(ByVal Target As Range)

 If Target = Range("AF1") Then
    Range("AB2:AB75").Copy
    Range("AA2:AA75").PasteSpecial
 Else

 End If
 End Sub

当我更改日期时,它会崩溃TYPE MISMATCH 13并且这会变成高亮黄色

  

如果目标=范围(“AF1”)那么

2 个答案:

答案 0 :(得分:1)

如果要在Worksheet_Change事件宏中更改任何内容,则需要禁用事件处理,以便子不会触发另一个事件并尝试在其自身之上运行。

此外,目标可以是一个单元格或大量单元格。您无法将其与单个单元格进行可靠的比较。 可以然而,可靠地将其Range.Address property与单个单元格Range.Address property进行比较。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = Range("AF1").Address Then
        On Error GoTo bm_Safe_Exit
        Application.EnableEvents = False
        Range("AA2:AA75") = Range("AB2:AB75").Value
    Else
        'something else...?
    End If

bm_Safe_Exit:
    Application.EnableEvents = True
End Sub

使用Application.EnableEvents property tp禁用事件只能通过错误控制完成,并且在出现问题时始终将其重新打开。

答案 1 :(得分:0)

Private Sub Worksheet_Change(ByVal Target As Range)

  If Target.Address = "$AF$1" Then
     ' Avoid copy then paste by assigning the value itself
     Target.Worksheet.Range("AA2:AA75").Value = Target.Worksheet.Range("AB2:AB75").Value

  End If

 End Sub