0

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

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

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”方法中的任何内置函数,但我再次对此一无所知。

我什至不确定这是否可能,但我只是想知道是否有人可以看看这个并就我如何实现这一目标提供一些指导。

非常感谢和亲切的问候

克里斯

4

1 回答 1

0

由于您希望排除的数据位于范围的底部,您可以简单地“调整大小”排序范围以排除它。使用.endand.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)
于 2013-02-12T02:38:21.760 回答