当工作表A更改Excel VBA时,对工作表B中的数据进行排序

时间:2016-01-27 23:22:09

标签: excel excel-vba vba

我在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>

1 个答案:

答案 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