我想知道是否有人可以帮助我。
这样我就可以维护一个给定的'输入范围'我试图将一个脚本放在一起,从用户选择的一行或多行中删除单元格内容。如果填充了从第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
我已将下面显示的“排序”宏放在一起,虽然这适用于包含数据的两个连续行,但它对我使用“删除”宏的行不起作用。
例如,如果我填充“输入范围”的第一行和第二行,则代码会使用“B”列作为排序条件对电子表格进行正确排序。但是,如果我删除第一行的内容,从而创建一个空白行,则“排序”脚本不会向上移动第二行。
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
我只是想知道是否有人可以看看这个,并提供一些指导我如何调整我的代码以便我可以添加排序功能。
非常感谢和亲切的问候
答案 0 :(得分:0)
要根据您的代码删除行,您最好的选择是:
Selection.Delete Shift:=xlUp
如果您想确保删除整行,那么您需要这样:
Selection.EntireRow.Delete Shift:=xlUp
至于之后的排序,如果有必要,你应该研究Range.Sort
编辑:如果你想删除部分行,但具体可以这样做:
Range(Cells(Selection.Row,5),Cells(Selection.Row,8)).Delete Shift:=xlUp
这会将删除应用于E-H
列。
答案 1 :(得分:0)
尝试将标题更改为xlNo而不是xlGuess。 Excel可能“认为”您有一个标题行,它不会包含在要排序的行中,因此您的空行顶行将保留在那里。
即改变
Header:=xlGuess
至Header:=xlNo
答案 2 :(得分:0)
在互联网上搜索更多内容后,我发现了以下文章: http://www.access-programmers.co.uk/forums/showthread.php?t=178521
使用这个,我已将我的'删除行'代码修改为以下完美无缺的代码:
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
非常感谢所有善意提供帮助的人。
非常感谢,祝新年快乐。
亲切的问候