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

时间:2013-02-10 14:35:22

标签: excel-vba excel-2003 vba excel

我想知道是否有人可以帮助我。

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

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 

代码工作正常,但我想进一步扩展功能并从排序中排除文本值“输入您的名字”,因此B列中具有此值的单元格将始终是我所有数据行下面的最后一行。

我花了一周左右的时间试图寻找解决方案,但遗憾的是我无法这样做。我还查看了Microsft网站,看看它们是否是'Range.sort'方法中的任何内置函数,但我再次对此进行了空白。

我甚至不确定这是否可行,但我只是想知道是否有人可能会看到这个并提供一些关于如何实现这一目标的指导。

非常感谢和亲切的问候

克里斯

1 个答案:

答案 0 :(得分:0)

由于您要排除的数据位于范围的底部,因此您只需“正确调整”排序范围以排除它。使用.end.row方法计算出您有多少数据

Dim EndRow as long
在if statment add

之后

'find last row of data
EndRow = Range("B7").end(xldown).row -1

更改范围以使用新计算的结束行。

.Range("B7:AH400")

变为

.Range("B7:AH" & EndRow)