Excel VBA中的自动筛选排序

Excel VBA中的自动筛选排序,excel,vba,autofilter,Excel,Vba,Autofilter,我正在制作一个VBA宏。在某一点上,宏告诉excel更改当前自动筛选,使自动筛选的排序位于列A中的列上,并且应该是升序 但是,我现在使用的VBA代码表明,该范围是硬编码的,即范围(A1:A655),这是因为该代码是在录制的宏中编写的。下面是我的VBA代码。您能告诉我如何更改A1:A655,而不是以硬编码的方式,而只是一般意义上的“使范围成为该列中的所有行,不管有多少行?” ActiveWorkbook.Worksheets("A1").AutoFilter.Sort.SortFields.Add

我正在制作一个VBA宏。在某一点上,宏告诉excel更改当前自动筛选,使自动筛选的排序位于
列A
中的列上,并且应该是升序

但是,我现在使用的VBA代码表明,该范围是硬编码的,即
范围(A1:A655)
,这是因为该代码是在录制的宏中编写的。下面是我的VBA代码。您能告诉我如何更改
A1:A655
,而不是以硬编码的方式,而只是一般意义上的“使范围成为该列中的所有行,不管有多少行?”

ActiveWorkbook.Worksheets("A1").AutoFilter.Sort.SortFields.Add Key:=Range(
        "A1:A655"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=
        xlSortTextAsNumbers

尽量避免依赖。您应该知道您所在的工作表,并通过工作表或 工作表属性

我相信你把a和a弄混了。也就是说,除非你实际上有一个名为A1的工作表,这似乎不太可能

是一种很好的引用从A1辐射出的不间断单元块的方法。它向下和向右继续,直到它遇到完全空白行和完全空白列。单个或小组中间空白单元不会中断对单元块的引用

    With ActiveWorkbook
        With .Worksheets("Sheet1")
            If .AutoFilterMode Then .AutoFilterMode = False
            With .Cells(1, 1).CurrentRegion
                .Cells.Sort Key1:=.Columns(1), Order1:=xlAscending, _
                            Orientation:=xlTopToBottom, Header:=xlYes
                With .Resize(.Rows.Count, 141)  '<~~ A:EK
                    .AutoFilter Field:=36, Criteria1:=1

                    'the CurrentRegion is sorted on column A and filtered
                    'on column AJ

                End With
            End With
        End With
    End With
使用ActiveWorkbook进行

随附工作表(“表1”)
如果.AutoFilterMode,则.AutoFilterMode=False
带.Cells(1,1).CurrentRegion
.Cells.Sort Key1:=.Columns(1),Order1:=xl升序_
方向:=xltoptobttom,标题:=xlYes

使用.Resize(.Rows.Count,141)“对不起,我应该写得更清楚一些……我应该说代码现在说明了要硬编码的键范围A1:A655。关键参数是我关心的参数。我很抱歉在这里添加更多内容……我还需要回答关于另一个VBA命令的基本相同问题,这是一个过滤器而不是排序。这个命令d我还需要从以下内容中删除“硬编码范围”…这方面的任何提示?ActiveSheet.range($A$1:$EK$655”)。自动筛选字段:=36,标准1:=“1”“也只是作为旁白。。。事实上,我的工作簿确实有一个名为A1的工作表!还有A2、A3和B1、B2、C1、D1。。。由于我工作的性质。有趣的巧合可能不止一次地混淆事物是的,看起来您提供了工作代码,但我无法协调A1引用;不用担心,只要你能让他们保持正直。在以后的问题中,可能会特别提到这一点,或者你可能会得到像我自己这样有疑问的解释。同样,这对我很有帮助。在我继续之前,我对您上面提供的代码有几个问题。我想知道您在代码中放置的嵌套“With.Resize”命令。(1) 如果我确信上面的“Currentregion”代码已经为操作识别了正确的完整单元块,那么这会被视为不必要的吗?换句话说,A:EK在前面的步骤中已经被完美地指定了?(2) 如果我确实可以确定Currentregion已经正确地抓取了正确的区域,我会对代码做什么来删除“With.Resize”?只需删除该行及其伴随的结尾With。如果您的数据在使用CurrentRegion时允许:EK,则不需要它。它在那里只是因为我不能确定。谢谢,你很棒。我又想到了一个问题,这个问题更暴露了我新手的一面。对于过滤器,我知道如果我想让过滤器同时包含两个条件,比如x和y,那么我只需添加一个额外的.AutoFilter字段。。。。。。。行和行必须匹配这两个条件。但是如果我想让过滤器同时满足两个条件“或”ed。。。如果是x条件还是y条件,则应显示like行?让上面的代码做到这一点的最优雅的方式是什么?再次感谢你的帮助,埃里克