在VBA excel中运行排序功能

时间:2018-07-19 14:43:20

标签: vba excel-vba excel-formula

我正在多个标签下运行以下代码,criteria1criteria2都可以正常工作,但是当我添加crietria3时会收到错误消息

  

“找不到命名参数”

基本上,代码的第一部分(在criteria1代码之前)只是对第一个单元格进行简单的数字划分,然后将其转换为百分比。

  • criteria1对一列进行排序,并使用下面列出的特定数字提取单元格。
  • Criteria2隐藏我不需要的不必要的列。

  • Criteria3然后按最大到最小过滤AD1列,这是代码因“找不到命名参数” 错误而中断的地方。

可以帮忙吗?

Sub Macro2()

    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        ws.Range("AD1").Value = "In %"
        ws.Range("AD1").Font.Bold = True
        With ws.Range("AD2:AD91")
            .FormulaR1C1 = "=RC[-2]/R2C28"
            .Style = "Percent"
            .NumberFormat = "0.0%"
            .Font.Bold = True
            ws.Range("A1:AD91").AutoFilter Field:=7, Criteria1:=Array("11", "21", "22""23", "31-33", "42", "44-45", "48-49", "51", "52", "53", "54", "55", "56", "61", "62", "71", "72", "81"), Operator:=xlFilterValues, Criteria2:=ws.Range("A:A,I1,F:F,C:E,I:AA").EntireColumn.Hidden = True, Criteria3:=ws.Range("AD1"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= xlSortNormal
        End With
    Next ws
    Application.ScreenUpdating = False
End Sub

1 个答案:

答案 0 :(得分:0)

我将您的第一个条件分为一个数组,以在过滤这些值时提高可读性。

这应该遍历工作表,隐藏列(我删除了这个I1,错字?),按您的Arr1进行过滤,然后按降序对AD列中的值进行排序。

您还可以通过关闭屏幕更新来结束您的订阅。我不确定这是否是故意的。在此处进行了更新,以在循环开始之前关闭ScreenUpdating,并在sub的末尾重新启用。

Option Explicit
Sub Macro2()

Dim ws As Worksheet
Dim Arr1

Arr1 = Array("11", "21", "22", "23", "31-33", "42", "44-45", "48-49", "51", "52", "53", "54", "55", "56", "61", "62", "71", "72", "81")

'Application.ScreenUpdating = False
    For Each ws In ThisWorkbook.Worksheets
        ws.Range("A:A,C:F,I:AA").EntireColumn.Hidden = True
        ws.Range("AD1").Value = "In %"
        ws.Range("AD1").Font.Bold = True
            With ws.Range("AD2:AD91")
                .FormulaR1C1 = "=RC[-2]/R2C28"
                .Style = "Percent"
                .NumberFormat = "0.0%"
                .Font.Bold = True
            End With
        ws.Range("A1:AD91").AutoFilter Field:=7, Criteria1:=Arr1
        ws.Range("A1:AD91").Sort Range("AD2"), xlDescending, Header:=xlYes
    Next ws
'Application.ScreenUpdating = True

End Sub