我在Excel中的一个工作簿中有三张表。我有工作表A,我从其他程序粘贴原始数据,工作表B从工作表A中获取数据并对前三列进行排序,而工作表C使用已排序的数据进行计算。
我想要做的是在工作表A中粘贴数据时触发工作表B中的排序,这样如果一切正常,您将永远不必查看工作表B.
我对Excel VBA不是很有经验,但这是我从做过一些研究得到的:
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
Range("A1:C314").Sort _
Key1:=Range("A2"), Order1:=xlDescending, _
Key2:=Range("B2"), Order2:=xlDescending, _
Key3:=Range("C2"), Order3:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
Application.EnableEvents = True
End Sub
我在VBA窗口的“Sheet B”中的“Microsoft Excel Objects”中有这个。当我在任何工作表上进行更改时,我遇到的问题是宏触发器,而不仅仅是工作表A.我想要完成的是当我在工作表A中粘贴数据时,工作表B中的更改将触发宏。< / p>
答案 0 :(得分:1)
在SheetA中使用Worksheet_Change事件而不是全局Worksheet_Calculate。
监控粘贴数据时将受影响的单元格或一系列单元格,例如监视列A以进行更改,并仅在更改A列中的单元格时运行其余代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
' run code to copy the data from SheetA to SheetB
' run code to sort SheetB
End If
End Sub