2016-05-27 151 views
1

我正在製作一個庫存系統。我想要的是當日期改變時關閉股票複製到開盤股票列,並關閉股票保持其公式只是將值複製到開盤股票。Excel VBA剪切或複製粘貼在單元格更改上

日期是細胞 「AF1」 今天日期公式= TODAY() 股市收盤在塔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 

當我更改日期它碰撞類型不匹配13,這成爲突出黃色

如果Target =範圍( 「AF1」)然後

回答

1

如果你要更改事件宏中的所有內容,您需要禁用事件處理,以便該子項不會觸發另一個事件並嘗試在其本身之上運行。

此外,目標可以是一個單元格或大量的單元格。您無法可靠地將其與單個單元格進行比較。您可以然而,可靠地比較其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禁用事件只能與誤差控制來完成rthat總是會重新開啓它,以防出錯。

+0

其工作良好只需添加一兩件事來清除列B2:否則 –

+0

聽起來適當之前ClearContents':Z2我可以用'範圍(「Z2 B2」)。您位於工作表代碼表的Private Sub中,因此除非需要引用其他工作表,否則顯式引用工作表並不重要。 – Jeeped

+0

感謝它正在工作,也清除內容 –

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 
+0

它在第一次點擊時效果很好。清除目標單元后的後續點擊不起作用。什麼是利用這些變化事件的正確方法。 – skkakkar

+0

它的作品就像我的終極魅力。我要更新我的答案,告訴你如何不做複製粘貼... –

+0

它工作正常。謝謝 – skkakkar