我正在继续努力处理从大型机中提取的数据。目前,我正在继续对用于表单和潜在数据处理等的数据进行排序。数据是字母数字,在形式上类似于我之前与我持续的数据工作相关的问题之一。
我目前的开发线之一涉及以启用宏的按钮的形式提高可用性。一个这样的按钮涉及一个宏,该宏旨在删除从A2到工作表中任何现有数据行末尾的一列"A"中的所有数据。
代码如下:
Sub DeleteCriteria_Click()
Dim CriteriaRange As Range
Dim LastCriteriaCell As Long
With Sheets("Criteria")
LastCriteriaCell = .Range("A" & Sheets("Criteria").Rows.Count).End(xlUp).Row
Set CriteriaRange = .Range("A2:A" & LastCriteriaCell)
End With
CriteriaRange.Cells.Select
Selection.Delete
End Sub
奇怪的是,每次我激活按钮时,这段代码最终都会将我的列移动一个,并最终通过反复单击删除我的标题和后续列。此行为类似于列的普通删除函数。重构范围命令 CriteriaRange.Cells.Select
| Selection.Delete
到表单CriteriaRange.Cells.Delete
和CriteriaRange.Delete
不会更正此问题。
我的目的是完全删除条目,以便在删除条目后输入新条件时没有空白或剩余数据集。因此,我有两个问题:
1)是什么导致了这种行为,即我在这里做错了什么?
2)如何纠正此行为以完全删除单元格或在功能上执行等效操作,从而防止对空白或空单元格的任何引用,同时保留我的列?
将代码更改为
CriteriaRange.Delete Shift:=xlUp
默认值为
CriteriaRange.Delete Shift:=xlToLeft
因此,您的列将被移动。
您的代码可以编写为
Sub DeleteCriteria_Click()
Dim LastCriteriaCell As Long
With Sheets("Criteria")
LastCriteriaCell = .Range("A" & .Rows.Count).End(xlUp).Row
'~~> This is required so that your header cells are not touched
If LastCriteriaCell < 2 Then Exit Sub
.Range("A2:A" & LastCriteriaCell).Delete Shift:=xlUp
End With
End Sub
或
Sub DeleteCriteria_Click()
Dim LastCriteriaCell As Long
With Sheets("Criteria")
LastCriteriaCell = .Range("A" & .Rows.Count).End(xlUp).Row
'~~> This is required so that your header cells are not touched
If LastCriteriaCell >= 2 Then _
.Range("A2:A" & LastCriteriaCell).Delete Shift:=xlUp
End With
End Sub