VBA自动排序更新

时间:2016-03-03 18:32:37

标签: excel vba excel-vba

我有一个包含三列的电子表格; A和B中的值使用公式计算C列中的值,并且我想在列C上对Z-> A进行排序,同时将选择扩展到其他两列。我的目标是在C列中的值发生变化时自动更新排名。我正在寻找能为我写这篇文章的人,我知道JS而不是VBA而且我很难搞清楚因为它并不容易(至少对我而言)。谢谢!

D/LeakCanary: * com.testapp.MainActivity has leaked:
D/LeakCanary: * GC ROOT static android.content.res.Resources.sPreloadedDrawables
D/LeakCanary: * references array android.util.LongSparseArray[].[0]
D/LeakCanary: * references android.util.LongSparseArray.mValues
D/LeakCanary: * references array java.lang.Object[].[2]
D/LeakCanary: * references android.graphics.drawable.InsetDrawable$InsetState.mDrawableState
D/LeakCanary: * references android.graphics.drawable.StateListDrawable$StateListState.mRes
D/LeakCanary: * references android.support.v7.widget.TintResources.mContext
D/LeakCanary: * leaks com.testapp.MainActivity instance

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
    Application.EnableEvents = False
    Columns("C").Sort Key1:=Range("C2"), Order1:=xlDescending, _
        Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    Application.EnableEvents = True
End If

1 个答案:

答案 0 :(得分:0)

将此代码放在VBE中ThisWorkbook文件夹的Microsoft Excel Objects模块中。

每次重新计算工作簿时,这将按工作表中的列C排序(在下面的代码中更改名称以适合您的实际工作表)。显然它会发生比需要更多次,但它是确保它自动触发的唯一方法。

如果由于文件大小或“重新计算”的数量而导致性能问题,可能会稍微调整一下,或者可以调整电子表格的设计。

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

If sh.Name = "myABCSheet" or sh.Name = "Orders" or sh.Name = "Forecast"

    Dim ws As Worksheet
    Set ws = Worksheets("myABCSheet") 'change name as needed

    With ws

        Dim lRow As Long
        lRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row

        With .Sort

            With .SortFields
                .Clear
                .Add ws.Range("C1:C" & lRow), 1, xlAscending
            End With

            .SetRange ws.Range("A1:C" & lRow)
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            Application.Calculation = xlManual
            .Apply
            Application.Calculation = xlCalculationAutomatic
        End With

    End With

    Application.EnableEvents = True

End If

End Sub