我想知道是否有人可以帮助我。
为了保持给定的“输入范围”,我正在尝试编写一个脚本,该脚本从用户选择的一行或多行中删除单元格内容。如果填充了从第 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
我只是想知道是否有人可以看看这个,并就我需要如何调整我的代码提供一些指导,以便我可以添加排序功能。
非常感谢和亲切的问候