![](/img/trans.png)
[英]If cell A1 on sheet1 contains X then copy A1 from sheet2 to cell A2 on sheet 1
[英]Automatically Copy Sheet 1 A1:A2 to Sheet 2 A1:A2 When Sheet1 A1:A2 Changes
目標:如果工作表1的A1:A2中的任何值發生變化,則工作表2的A1:A2中的值應自動使用這些值進行更新。 以下工作表1的事件處理程序無法正常工作:
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
Dim target As Range
Set target = Range("A1:A2")
If Not Intersect(target, Sheets(2).Range("A1:A2")) Is Nothing Then
Range("A1:A2").Value = Sheets(2).Range("A1:A2").Value
End If
Application.EnableEvents = True
End sub
像往常一樣,VBA令人費解的語法令人沮喪。 可以參考實現上述簡單任務的任何建議,也可以參考對解釋VBA的隱藏細節實際上有用的VBA參考指南。
正如其他人所說,您需要將事件處理程序放在要監視的工作表中。
Worksheet_Change
將響應用戶所做的更改。 如果單元格由於其他原因(例如,計算公式)而發生更改,則不會調用此事件。
Worksheet_Calculate
將響應Worksheet_Calculate
表重新計算。 它不知道工作表上的哪些單元格已更改。 要在用例中使用它,請無論如何復制單元格並接受它會做一些不必要的復制,或者自己跟蹤A1:A2
的值以在更改時進行復制
有關代碼的注釋:
Range
是指在工作表的代碼是。所以呢Me
。 CodeName
來引用特定工作表,無論用戶調用它還是移動它。 Intersect
沒有意義並且會出錯 Sheets(1)
和Sheet1
可能不是同一工作表。 Sheets
集合索引的順序是表格在Excel中的顯示順序,並且可以由用戶更改。 這是代碼的重構(將其放入工作表1模塊中,將更改從工作表1復制到工作表2)
Private Sub Worksheet_Calculate()
If Sheet2.Cells(1, 1).Value <> Me.Cells(1, 1).Value Or _
Sheet2.Cells(1, 2).Value <> Me.Cells(1, 2).Value Then
Application.EnableEvents = False
Sheet2.Range("A1:A2").Value = Me.Range("A1:A2").Value
Application.EnableEvents = True
End If
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.