Excel 从VBA自动排序中排除文本值

Excel 从VBA自动排序中排除文本值,excel,excel-2003,vba,Excel,Excel 2003,Vba,不知是否有人能帮助我 我正在使用下面的代码在工作簿关闭之前对其执行排序 Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheets("Input").Protect "password", UserInterFaceOnly:=True With ThisWorkbook.Worksheets("Input") If .Range("B7").Value = "" Then Exit Sub

不知是否有人能帮助我

我正在使用下面的代码在工作簿关闭之前对其执行排序

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Sheets("Input").Protect "password", UserInterFaceOnly:=True 
    With ThisWorkbook.Worksheets("Input") 

        If .Range("B7").Value = "" Then Exit Sub 
        .Range("B7:AH400").Sort Key1:=.Range("B7"), _ 
        Order1:=xlAscending, _ 
        Header:=xlGuess, _ 
        OrderCustom:=1, _ 
        MatchCase:=False, _ 
        Orientation:=xlTopToBottom, _ 
        DataOption1:=xlSortNormal 
    End With 
End Sub 
代码运行良好,但我想进一步扩展功能,并从排序中排除文本值“EnterYourName”,因此列B中具有此值的单元格将始终是所有数据行下方的最后一行

我花了一周左右的时间试图找到一个解决方案,但不幸的是,我一直无法做到这一点。我还查看了Microsft网站,看看它们是否有“Range.sort”方法中的内置函数,但我在这一点上还是一片空白

我甚至不确定这是否可行,但我只是想知道是否有人可以看看这一点,并就我如何实现这一点提供一些指导

非常感谢和亲切的问候


Chris

由于要排除的数据位于范围的底部,您可以简单地“调整”排序范围以排除它。使用
.end
.row
方法计算您拥有的数据量

Dim EndRow as long
在if语句之后添加

'find last row of data
EndRow = Range("B7").end(xldown).row -1
更改范围以使用新计算的结束行

.Range("B7:AH400")
变成

.Range("B7:AH" & EndRow)

我的第一个想法(因为它只是数据的1),是删除“输入您的姓名”数据值。。。然后分类。。。。然后将其重新添加回数据集的底部。显然,这不是非常可扩展的。此外,如果“输入您的姓名”自然位于数据集的底部,您也可以将其从排序范围中排除。您好@Pynner,感谢您抽出时间回复我的帖子。我很想知道是否有可能从排序中排除这个值。我只是想知道你是否可以为我提供一些指导。非常感谢和亲切的问候。ChrisHi@Pynner,非常感谢您抽出时间回复我的帖子,并将解决方案整合在一起。这正是我想要的。亲切的问候。克里斯