使用命令按钮VBA的奇怪删除行为



我正在继续努力处理从大型机中提取的数据。目前,我正在继续对用于表单和潜在数据处理等的数据进行排序。数据是字母数字,在形式上类似于我之前与我持续的数据工作相关的问题之一。

我目前的开发线之一涉及以启用宏的按钮的形式提高可用性。一个这样的按钮涉及一个宏,该宏旨在删除从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.DeleteCriteriaRange.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

最新更新