我正在继续努力从大型机中提取数据。目前,我正在继续研究sorting data for use in forms和潜在的数据处理等工作。这些数据是字母数字,在形式上与我持续数据工作相关的previous questions之一相似。
我目前的一个开发项目是以宏启用按钮的形式增加了可用性。一个这样的按钮涉及一个宏,该宏旨在将一列“A”中的所有数据从A2删除到工作表中任何现有数据行的末尾。
代码如下:
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)如何更正此行为以彻底删除单元格或在功能上执行等效操作,从而防止在保留我的列的同时引用空白或空单元格?
答案 0 :(得分: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