簡體   English   中英

當Sheet1 A1:A2更改時,自動將Sheet 1 A1:A2復制到Sheet 2 A1:A2

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM