Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将包含数据的行移到顶部_Excel_Excel 2003_Vba - Fatal编程技术网

Excel 将包含数据的行移到顶部

Excel 将包含数据的行移到顶部,excel,excel-2003,vba,Excel,Excel 2003,Vba,我想知道是否有人能帮助我 为了保持给定的“输入范围”,我正在尝试编写一个脚本,从用户选择的一行或多行中删除单元格内容。然后,如果从第7行开始的列“A”已填充,则将包含数据的所有行移动到电子表格的顶部 我将下面的代码放在一起,从行中删除单元格内容,但我无法解决如何将包含数据的行“上移”到另一行下,从而忽略数据之间的任何空白行 Sub DelRow() Dim msg Sheets("Input").Protect "password", UserInterFaceOnly

我想知道是否有人能帮助我

为了保持给定的“输入范围”,我正在尝试编写一个脚本,从用户选择的一行或多行中删除单元格内容。然后,如果从第7行开始的列“A”已填充,则将包含数据的所有行移动到电子表格的顶部

我将下面的代码放在一起,从行中删除单元格内容,但我无法解决如何将包含数据的行“上移”到另一行下,从而忽略数据之间的任何空白行

Sub DelRow()
    Dim msg

        Sheets("Input").Protect "password", UserInterFaceOnly:=True
        Application.EnableCancelKey = xlDisabled
        Application.EnableEvents = False
        msg = MsgBox("Are you sure you want to delete this row?", vbYesNo)
        If msg = vbNo Then Exit Sub
        With Selection
            Application.Intersect(.Parent.Range("A:R"), .EntireRow).Interior.ColorIndex = xlNone
            Application.Intersect(.Parent.Range("S:AD"), .EntireRow).Interior.ColorIndex = 37
            Application.Intersect(.Parent.Range("AF:AQ"), .EntireRow).Interior.ColorIndex = 42
            Selection.SpecialCells(xlCellTypeConstants).ClearContents
        End With
        Application.EnableEvents = True

End Sub
我已经组合了一个如下所示的“Sort”宏,虽然它适用于包含数据的两个连续行,但它不适用于我使用“Delete”宏的行

例如,如果我填充了“输入范围”的第一行和第二行,代码将使用列“B”作为排序标准对电子表格进行正确排序。但是,如果删除第一行的内容,从而创建一个空行,“Sort”脚本不会向上移动第二行

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.EnableCancelKey = xlDisabled
    With Sheets("Input")
        If .Range("A7").Value = "" Then Exit Sub
        .Range("B7:AS400").Sort Key1:=Range("$B$1"), _
        Order1:=xlAscending, _
        Header:=xlGuess, _
        OrderCustom:=1, _
        MatchCase:=False, _
        Orientation:=xlTopToBottom, _
        DatOption1:=xlSortNormal
    End With
End Sub
我只是想知道是否有人可以看看这一点,请提供一些指导,我需要如何调整我的代码,以便我可以添加排序功能


非常感谢和问候

要根据您的代码删除该行,您最好的选择是:

Selection.Delete Shift:=xlUp

如果要确保删除整行,请执行以下操作:

Selection.EntireRow.Delete Shift:=xlUp

至于以后的分类,如果有必要的话,你应该调查一下


编辑:如果要删除行的一部分,但要具体,可以执行以下操作:


范围(单元格(Selection.Row,5),单元格(Selection.Row,8))。删除移位:=xlUp
这会将删除应用于列
E-H

尝试将标题更改为xlNo而不是xlGuess。Excel可能“认为”您有一个标题行,它不会包含在要排序的行中,因此您的空白顶行将保留在那里

也就是说,改变
Header:=xlGuess
Header:=xlNo

在互联网上进行更多搜索后,我发现了以下文章:

使用此选项,我将“删除行”代码修改为以下代码,效果非常好:

Sub DelRow()
    Dim msg

        Sheets("Input").Protect "handsoff", UserInterFaceOnly:=True
        Application.EnableCancelKey = xlDisabled
        Application.EnableEvents = False
        msg = MsgBox("Are you sure you want to delete this row?", vbYesNo)
        If msg = vbNo Then Exit Sub
        With Selection
            Application.Intersect(.Parent.Range("A:R"), .EntireRow).Interior.ColorIndex = xlNone
            Application.Intersect(.Parent.Range("S:AD"), .EntireRow).Interior.ColorIndex = 37
            Application.Intersect(.Parent.Range("AF:AQ"), .EntireRow).Interior.ColorIndex = 42
            Selection.SpecialCells(xlCellTypeConstants).ClearContents
        End With
       Application.EnableEvents = True
            With Range("A7:AS400" & Cells(Rows.Count, "A").End(xlUp).Row)
            .Sort Key1:=Range("B7"), _
            Order1:=xlAscending, _
            Header:=xlNo, _
            OrderCustom:=1, _
            MatchCase:=False, _
            Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
End With

End Sub
非常感谢所有好心提供帮助的人

非常感谢,祝你新年快乐


在回答您的问题并重新阅读您的问题后,向您致以亲切的问候

。。。你真的是想删除整行,还是只是其中的一部分?嗨@Daniel Cook,谢谢你花时间回复我的帖子。我没有删除行,因为我需要“输入范围”保持非托管状态,所以我将删除单元格内容。根据我对您最初评论的回答,非常感谢并感谢Daniel Cook。我不想删除该行,因为我需要维护一个固定的“输入范围”。除非有另一种方法,我非常高兴能被展示出来,否则我所知道的唯一能做到这一点的方法就是清除单元格内容。但是我想,如果可能的话,请将包含数据的任何行移到顶部,这样在包含数据的行之间就没有空行了。非常感谢和亲切的问候。嗨@Daniel Cook,非常感谢你在这件事上回到我身边。我已经整理了一个“排序”脚本,现在已经包含在我的原始帖子中。如果我添加两个连续的包含数据的行,则使用列“B”作为排序标准,排序将正常工作。但是,如果我最初使用“删除”宏,则正确删除单元格的内容,从而创建一个空白行,但排序函数不会将第二行移动,从而移除空白行。我希望这有帮助。非常感谢并感谢Daniel Cook,请查看我发布的答案。善良的regardsHi@Lord Peter,感谢您抽出时间回复我的帖子。请看我发布的答案。问候