使用worksheet_change
“主”电子表格中的事件。当“主”表中的数据更新时,它将引发worksheet_change
事件,您可以调用您的代码来更新其他表。
您可以在此处找到有关如何使用它的详细说明:http ://www.ozgrid.com/VBA/run-macros-change.htm
我用您的代码设置了一个工作示例。该工作簿有 6 张(“master”、“AP”、“All AP”、“CSW”、“CO”和“PSR”)。每个工作表中的第 1 行被假定为标题行。使用以下代码设置工作簿后,您在“主”工作表上所做的任何更改都会引发 worksheet_change 事件,从而导致工作簿中的所有目标工作表都使用最新数据进行更新。
请按照以下步骤使其工作:
在主表的代码模块中添加以下内容:
_
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Call UpdateFromMaster
End Sub
将这些子组件添加到标准模块中:
_
Sub UpdateFromMaster()
' clear whatever you had previously written to the destination sheets
Call ResetDestinationSheets
' the code you already had
Dim LR As Long, i As Long
LR = Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To LR
If Range("B" & i).Value = "AP" Then Rows(i).Copy Destination:=Sheets("AP").Range("A" & Rows.Count).End(xlUp).Offset(1)
If Range("B" & i).Value = "*AP" Then Rows(i).Copy Destination:=Sheets("All AP").Range("A" & Rows.Count).End(xlUp).Offset(1)
If Range("B" & i).Value = "CSW" Then Rows(i).Copy Destination:=Sheets("CSW").Range("A" & Rows.Count).End(xlUp).Offset(1)
If Range("B" & i).Value = "CO" Then Rows(i).Copy Destination:=Sheets("CO").Range("A" & Rows.Count).End(xlUp).Offset(1)
If Range("B" & i).Value = "PSR" Then Rows(i).Copy Destination:=Sheets("PSR").Range("A" & Rows.Count).End(xlUp).Offset(1)
Next i
End Sub
_
Sub ResetDestinationSheets()
'== not elegant, but will work in your example
Call ResetThisSheet("AP")
Call ResetThisSheet("ALL AP") ' I didn't know what you called this sheet
Call ResetThisSheet("CSW")
Call ResetThisSheet("CO")
Call ResetThisSheet("PSR")
End Sub
_
Sub ResetThisSheet(ByRef SheetToClear As String)
Sheets(SheetToClear).Range("A2:B" & Rows.Count).Clear
End Sub