为什么在使用SortFields.Add2添加键时出现1004错误?

时间:2019-05-04 11:13:02

标签: excel vba sorting

我正在尝试对Excel表中的数据进行排序以在UserForm中使用。我有保存整个模块声明的Listobject的变量,并在初始化时进行设置。但是,当我尝试应用排序字段键时,它将引发以下错误:

  

运行时错误“ 1004”:

     

应用程序定义或对象定义的错误

以下是相关代码部分:

Private lotable_OVERLAY_DETAILS As ListObject

Private Sub UserForm_Initialize()

    Set lotable_OVERLAY_DETAILS = OVERLAY_DETAILS.ListObjects("OVERLAY_DETAILS")
    Call Sort_OVERLAY_DETAILS

End Sub

Private Sub Sort_OVERLAY_DETAILS()

    lotable_OVERLAY_DETAILS.ShowAutoFilter = False 'Clear any existing filters
    lotable_OVERLAY_DETAILS.ShowAutoFilter = True

    lotable_OVERLAY_DETAILS. _
        Sort.SortFields.Add2 key:=Range("OVERLAY_DETAILS[[#All],[PORTFOLIO_NAME]]"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    lotable_OVERLAY_DETAILS. _
        Sort.SortFields.Add2 key:=Range("OVERLAY_DETAILS[[#All],[OVERLAY_NAME]]"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With lotable_OVERLAY_DETAILS.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

尝试执行任何lotable_OVERLAY_DETAILS.Sort.SortFields.Add2行时都会发生错误。这段代码不久前就开始工作了,我使用相同的方法对其他几个表进行了排序。我不确定为什么现在只在此错误上出现此错误。我想念什么?

1 个答案:

答案 0 :(得分:0)

我通过在SortFields行之前添加以下内容解决了这个问题:

lotable_OVERLAY_DETAILS.Sort.SortFields.Clear

原来这些表对它们的排序字段限制为64,即使清除自动筛选器,这些表也仍然存在。

在我的情况下,此错误弹出,因为我一遍又一遍地测试代码。当我这样做时,此特定行添加了两个SortFields,而其他行仅添加了一个。因此,该表越早越过错误并达到了极限。在添加新过滤器之前清除过滤器可以解决所有问题。