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

时间:2012-08-13 15:58:03

标签: vba excel-vba excel

我正在继续努力从大型机中提取数据。目前,我正在继续研究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.DeleteCriteriaRange.Cells.Delete中的CriteriaRange.Delete不能解决此问题。

我的目的是完全删除条目,以便在删除条目后输入新条件时没有空白或剩余数据集。因此,我有两个问题:

1)造成这种行为的原因是什么,即我做错了什么,这里?

2)如何更正此行为以彻底删除单元格或在功能上执行等效操作,从而防止在保留我的列的同时引用空白或空单元格?

1 个答案:

答案 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